Категория: С++

Как не утонуть в одинаковых ошибках: CollapseXXX в logme

Одинаковые ошибки в логах — одна из самых неприятных проблем production-диагностики. Иногда проблема не в том, что логов мало, а в том, что их слишком много. Когда ошибка повторяется в цикле, на каждом reconnect-е, на каждом retry или на каждом запросе, лог быстро превращается в поток почти одинаковых строк. Например, внешний backend стал недоступен, а

Управление логированием без перезапуска

Управление логированием без перезапуска особенно важно для production-сервисов. Подробные debug-логи очень нужны именно тогда, когда что-то пошло не так, но держать их включенными постоянно обычно нельзя. Они создают шум, увеличивают объем файлов, могут замедлять горячие участки кода и иногда раскрывают детали, которые не должны постоянно попадать в лог. Самый простой подход — поменять конфиг и

Макросы логирования в C++: почему всё так сложно

Когда разработчик впервые смотрит на современную библиотеку логирования для C++, его почти всегда удивляет одно и то же: количество макросов. Почему их так много? Разве нельзя просто сделать одну красивую функцию Log() и успокоиться? Почему у библиотек вроде logme появляются десятки вариантов вроде LogmeI, LogmeW, LogmePV, fLogmeD, CH, SID, CHINT и других? На первый взгляд

Логирование на стадии ранней инициализации приложения

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