Логирование с log4j 1.2

Это довольно старый логер, появление которого, как и огромного количества других связано с тем, что в Java в своё время не было стандартного механизма логирования, что привело к настоящему хаосу. Библиотека логирования log4j 1.2 больше не поддерживается (начиная с 5 августа 2015), так что новые проекты его точно не используют, но старые ещё могли остаться. В современном мире правильным считается подход с использованием Slf4j и Logback.

Для начала давайте проведёт общим вводный курс в работу Log4j 1.2 (дальше в статье я не буду упоминать версию для краткости, но подразумевается именно версия 1.2). Работа с log4j заключается с работой с:

  • Logger — это куда мы в своём приложении отправляем сообщения.
  • Appender — различные обработчики сообщений лога. Каждый Appender обрабатывает какое-то определённое место назначения для сообщений лога (файл, память, TCP порт, JMS и т. д.), то есть это то же самое, что и Handler для java.util.logging.
  • Layout — форматирует сообщения логов, например в XML или HTML. Это аналог форматировщиков (formatters) в java.util.logging.

Для дальнейшего изучения создайте новый проект Maven. Добавьте туда зависимость:

Это самая последняя версия log4j 1.2. Новых версий больше не будет. Полную документацию (на английском) можно прочесть на официальном сайте. Возможности

Получим экземпляр логера для нашего класса:

Теперь нам нужно создавть файл конфигурации “log4j.properties” в “src/main/resources”:

В этом файле мы указываем, что корневой логер будет обрабатывать сообщения вплоть до уровня DEBUG, а также присоединяем к нему два appender-а: MyConsAppender и MyFileAppender. Первый будет писать логи в консоль, а второй будет писать логи в файл “log4j12example.log”, а также каждый новый день переименовывать старый файл в “log4j12example.log<дата>”, формат даты указан в datePattern.

Разберём строку, указанную в ConversionPattern:

%d{yyyy-MM-dd HH:mm:ss} — указываем формат вывода даты и времени для сообщений лога.

%t — название потока

%-5p — уровень сообщения лога (DEBUG, TRACE, ERROR…)

%c — категория лога (у нас будет выводиться имя класса)

%m — само сообщение

%n — перевод строки

Теперь нужно написать какое-нибудь тестовое приложение. Но для начала нужно разобраться с уровнями логирования. В log4j 1.2 существует шесть уровней логирования:

  • TRACE (для ещё большего количества ещё более детальных отладочных сообщений),
  • DEBUG (для отладочных сообщений),
  • INFO (для информационных сообщений),
  • WARN (для предупреждений),
  • ERROR (для логирования ошибок),
  • FATAL (для критических ошибок).

С этими знаниями мы уже можем написать простое приложение с логированием:

Если мы запустим этот класс на выполнение, то увидим в консоли и в файле лога следующее:

В log4j существует иерархия логеров. В нашем файле “log4j.properties” мы задавали настройки для корневого логера, а используем логер с именем класса (мы его получаем как Logger.getLogger(Log4j12ExampleApp.class)). При большом желании мы могли бы указать для этого логера отдельные настройки, appender-ы, уровень логирования и т. д. Например, следующая строчка в файле конфигурации укажет уровень логирования для пакета ru.urvanov:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *