Категория: Логирование

Этот раздел посвящён логированию на C и C++. Мы фокусируемся на реальных задачах, а не на абстрактных схемах.

Здесь вы найдёте разбор API, подходов к форматированию, буферизации и выводу данных. Мы анализируем библиотеки логирования и сравниваем разные решения.

Мы также разбираем проблемы, которые возникают в продакшене. Например, сложность интеграции, поведение под нагрузкой и ошибки проектирования.

Логирование — это не просто вспомогательный инструмент. Это важная часть системы, которую нужно проектировать осознанно.

Почему stream-style logging может быть дорогим

Stream-style logging выглядит очень естественно для C++ кода: LogmeD() << "request=" << requestId << ", user=" << userId; Такой стиль удобен. Он хорошо читается, работает с разными типами и позволяет использовать уже существующие operator<<. Поэтому многие C++ логгеры в той или иной форме поддерживают stream-style API. Но у этого удобства есть цена. В горячем коде,

logmeobf: обфускация логов

logmeobf легко неправильно понять по названию. Можно решить, что это отдельная утилита, которую нужно регулярно запускать над готовыми текстовыми логами: сначала приложение пишет app.log, потом logmeobf превращает его в app.logobf. Это не основной сценарий работы. В обычной конфигурации logme обфусцирует запись сразу в момент записи файла. Приложение передает библиотеке ключ, а FileBackend вместо обычного text,

Как подготовить логи logme для ELK, Loki, OpenSearch и Splunk

Подготовка логов для ELK, Loki, OpenSearch или Splunk начинается не с выбора агента и не с написания parser-а. Сначала нужно решить, каким является один логический event, какие поля должны быть стабильными, где находится время события и как файл будет жить после rotation. Самая частая ошибка — считать, что достаточно включить JSON. JSON сам по себе

Crash logging в C++

Почему обычный логгер не всегда можно вызвать из signal handler Когда C++ приложение падает, первое желание разработчика — записать последнее сообщение в лог. Например: “received SIGABRT”, “segmentation fault”, “fatal check failed”, “terminating process”. На первый взгляд это выглядит просто: раз в проекте уже есть логгер, надо вызвать его из signal handler или crash handler и