$ git clone <url> my_logger_project
$ cd my_logger_project$ make$ ./build/bin/log_demo ./build/log.txt infoв терминале будет приглашение >, вводите сообщения и в файле build/log.txt появятся строки вида:
2026-02-21 12:31:43 [Info] Стафеевна, выходи гулять на лавочке
2026-02-21 12:31:46 [Error] Нет, я её сейчас убивать пойду...
Программа поддерживает работу CLI-аргументами:
$ ./build/bin/log_demo --usage
Usage: log_demo [-v?] [-l LEVEL] [-o FILE] [--level=LEVEL] [--output=FILE]
[--verbose] [--help] [--usage]$ ./build/bin/log_demo --help
Usage: log_demo [OPTION...]
Simple Logger – утилита для записи журналов.
-l, --level=LEVEL Уровень логов (debug|info|error). По
умолчанию – info
-o, --output=FILE Файл журнала (по умолчанию
– stdout)
-v, --verbose Подробный вывод (verbose)
-?, --help Give this help list
--usage Give a short usage message
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
Если опция output не указана, вывод будет направлен в stdout.Нет, это не продукт LLM, это вывод PlantUML.
┌─────────────────────────────────┐ ┌─────────────────────────────┐
│ Динамическая библиотека │◀───────────│ Приложение‑тестер │
│ (logger.so) │ API │ (main) │
│ ┌───────────────────────────┐ │ └─────────────────────────────┘
│ │ Функции логгера (API) │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘
│
│ запись лога
│
▼
┌─────────────────────┐
│ Файл журнала │
│ (log.txt) │
└─────────────────────┘
Она умеет:
- Инициализироваться с именем файла и уровнем по умолчанию;
- Менять уровень логирования в любой момент;
- Принимать сообщения (текст + уровень) и сохранять их в файл потокобезопасно;
- Корректно закрывать файл и освобождать ресурсы.
Оно:
- Парсит параметры командной строки (имя файла, уровень по умолчанию);
- В бесконечном цикле принимает строки от пользователя и при необходимости уровень;
- Упаковывает данные в сообщение и передает его в поток‑рабочий библиотеки;
- Остается свободным для следующего ввода.
Жаль, что приходится это в очередной раз обговаривать, но и тут нет выводов LLM. Это - вывод утилиты tree.
/
├── .gitignore
├── README.md
├── Makefile # сборка библиотеки и приложения
├── include/ # заголовки (API)
│ └── logger/ # namespace‑по‑папке
│ ├── logger.hpp # API (класс Logger, enum Level)
│ ├── logger_impl.hpp # Идиома pimpl затясалась
│ └── logger_export.hpp # макрос экспорта/импорта символов
├── src/ # исходники библиотеки
│ ├── logger.cpp # реализация класса Logger
│ └── logger_impl.hpp
├── app/ # исходники тестового приложения
│ ├── cli.cpp #
│ ├── cli.hpp # Интерфейс командной строки (argp)
│ ├── console.cpp #
│ ├── console.hpp # Интерфейс командной строки (пользователь)
│ ├── level.hpp #
│ ├── producer.cpp #
│ ├── producer.hpp # Менеджер сообщений
│ └── main.cpp # точка входа, UI‑цикл, поток‑передатчик
├── tests/ # тесты
│ └── logger_test.cpp
└── build/ (выхлоп make) # артефакты сборки
├── lib/ # liblogger.so, объектные файлы
└── bin/ # исполняемые файлы