Логирование
Для чего вообще нужно логирование в приложении:
- Сказать, что делать система, не прибегая к отладчику.
- Найти причины возникновения той или иной ситуации внутри приложения.
- Анализ того на что тратится больше всего ресурсов.
Какие есть требования к логерам?
- Уровни логирования и фильтрация сообщений.
- Ротация лог файлов.
- Возможность писать сообщения не только в файл.
- Thread safety.
- Асинхронное логирование.
- Формат и конфигурация логов.
Уровни логирования
- TRACE — вывод всего подряд. На тот случай, если Debug не позволяет локализовать ошибку. В нем полезно отмечать вызовы разнообразных блокирующих и асинхронных операций.
- DEBUG — журналирование моментов вызова «крупных» операций. Старт/остановка потока, запрос пользователя и т. п.
- INFO — обычные сообщения, информирующие о действиях системы. Реагировать на такие сообщения вообще не надо, но они могут помочь, например, при поиске багов, расследовании интересных ситуаций итд.
- WARNING — нештатные ситуации. Например непредвиденные параметры, странные форматы запроса. Любая информация, которая должна привлечь внимание. Некритичные ошибки.
- ERROR — ошибка в работе системы, требующая вмешательства. Что-то не сохранилось, что-то отвалилось.
- FATAL — критическая ситуация, которая требует немедленной реакции. Обычно значит что система в неработоспособном состоянии. Пишем в лог все до чего можем дотянутся.
Замечание! Никогда не отправляйте пустое исключение в лог. Так как обычно не понятно к чему принадлежит этот стэк-трейс, как программа отреагировала на ошибку. Чтобы избежать этого, в дополнение к трейсам прикладывайте и сообщение, которое обьясняет что именно произошло.