JavaRush /Курсы /JSP & Servlets /Настройка уровней логирования

Настройка уровней логирования

JSP & Servlets
5 уровень , 3 лекция
Открыта

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 Популярные ошибки в логировании

И еще один важный момент – популярные ошибки в логировании. Вариантом что-то сделать не так много, но можно выделить несколько частых ошибок:

  1. Избыток логирования. Не стоит логировать каждый шаг, который чисто теоретически может быть важным. Есть правило: логи могут нагружать работоспособность не более, чем на 10%. Иначе будут проблемы с производительностью.
  2. Логирование всех данных в один файл. Это приведет к тому, что в определенный момент чтение/запись в него будет очень сложной, не говоря о том, что есть ограничения по размеру файлов в определенных системах.
  3. Использование неверных уровней логирования. У каждого уровня логирования есть четкие границы, и их стоит соблюдать. Если граница расплывчатая, можно договориться какой из уровней использовать.
Комментарии (7)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anonymous #3129578 Уровень 108
16 марта 2023
Вы с настройками уже перегнули палку. Информация в статье неактуальная. Либо пишите конфиг и версии вместе, либо ничего не пишите. Сейчас нужно делать примерно так: https://howtodoinjava.com/log4j2/log4j2-properties-example/
Daniel Уровень 51
12 июня 2023
Не информация неактуальная, а вы ссылаетесь на статью с конфигурацией совершенно другого логера (да, log4j и log4j2 это не разные версии, а разные продукты). Здесь же даже в самой конфигурации написано, что это org.apache.log4j
Дмитрий Уровень 100 Expert
20 декабря 2023
Да вроде бы, он очень даже правильно написал про неактуальность. On August 5, 2015 the Logging Services Project Management Committee announced that Log4j 1.x had reached end of life. For complete text of the announcement please see the Apache Blog. Users of Log4j 1 are recommended to upgrade to Apache Log4j 2
Сергей Уровень 111 Expert
4 октября 2022
Оставлю эту ссылку здесь, где всё максимально понятно. Много примеров, настроек и т.д. В статье как я понимаю используется устаревшая версия log4j, ссылка ведёт на актуальную версию 2.x. Соответственно пример в статье уже не актуален.
Andrey Panchenko Уровень 26
15 сентября 2022
Чувак написал более практично, если кто хочет попробовать в деле.
Алексей Уровень 91 Expert
26 июля 2022
Маловато информации про log4j.properties, примеров бы побольше с тем как и где его размещать.
Павел Уровень 111 Expert
31 октября 2023
Файлы properties размещаются в папке resources которая в свою очередь размещается в src/main, на том же уровне что и папка java. Это стандартная структура Maven-проекта, см. 1-й уровень этого модуля, лекция "Создание Maven-проекта". Сам файл properties - текстовый. Можно создать файл txt и переименовать его. Расширение txt меняем на properties. Работаем с такими файлами как с текстовыми, в блокноте или в другом текстовом редакторе (например Sublime Text), или в самой IDEA.