4.1 Список уровней логирования
Вы написали свою программу, залили ее на сервер и тут у вас сразу начинают появляться вопросы:
- Как сделать так, чтобы
debug()метод не отрабатывал во время работы вproduction? - В логах слишком много информации, хотелось бы оставить только сообщения об ошибках?
- Как увидеть детальный лог по одной части приложения?
Разумеется, создатели логов столкнулись с тем же самым еще десятки лет назад. Не буду рассказывать, как эту проблему решили в языке C, но в языке Java ее решили очень красиво.
Лог фильтрует данные, перед тем как записывать информацию в файл. Можно очень быстро снизить/увеличить детализацию лога с помощью настройки уровня логирования. Эти уровни описаны в таблице ниже:
| Уровень | Примечание | |
|---|---|---|
| 1 | ALL | Писать в лог все сообщения |
| 2 | TRACE | Мелкое сообщение при отладке |
| 3 | DEBUG | Сообщения важные при отладке |
| 4 | INFO | Простые сообщения |
| 5 | WARN | Писать только fatal, error и warning |
| 6 | ERROR | Писать только ошибки и фатальные ошибки |
| 7 | FATAL | Писать только фатальные ошибки |
| 8 | OFF | Не писать в лог сообщения |
Эти уровни используются при фильтрации сообщений. Если выставить уровень логирования в WARN, то все сообщения, менее важные, чем WARN будут отброшены: TRACE, DEBUG, INFO. Если выставить уровень фильтрации в FATAL, то будут отброшены даже ERROR’ы.
Есть еще два уровня важности, которые используются при фильтрации – это OFF (отбросить все сообщения) и ALL – писать все сообщения (не отбрасывать ничего).
4.2 Пример настройки лога
Давайте рассмотрим простой пример настройки лога. Для этого нам понадобится файл log4j.properties, который можно разместить в папке resources. Добавим в него такое содержание:
# Root logger option
log4j.rootLogger=WARN, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
Вот тут в самой первой строке мы и задаем уровень логирования – WARN. А это значит, что сообщения, которые пишутся в логгер со статусом DEBUG и INFO будут проигнорированы.
- Указываем какой тип аппендера будем использовать –
ConsoleAppender - Указываем, куда будем писать лог –
System.out - Задаем класс, который будет управлять форматом записи –
PatternLayout - Задаем формат записи для всех сообщений – дата и время
4.3 Популярные ошибки в логировании
И еще один важный момент – популярные ошибки в логировании. Вариантом что-то сделать не так много, но можно выделить несколько частых ошибок:
- Избыток логирования. Не стоит логировать каждый шаг, который чисто теоретически может быть важным. Есть правило: логи могут нагружать работоспособность не более, чем на 10%. Иначе будут проблемы с производительностью.
- Логирование всех данных в один файл. Это приведет к тому, что в определенный момент чтение/запись в него будет очень сложной, не говоря о том, что есть ограничения по размеру файлов в определенных системах.
- Использование неверных уровней логирования. У каждого уровня логирования есть четкие границы, и их стоит соблюдать. Если граница расплывчатая, можно договориться какой из уровней использовать.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ