1. Какие существуют типы логов?

  • системы (System);

  • безопасности (Security);

  • приложения (Application, Buisness).

Пользователь входит в приложение, проверяется пароль. Это действие относится к безопасности (Security). Дальше он запускает какой-нибудь модуль. Это событие уровня приложения (Application). Модуль при старте обращается к другому модулю за какими-то дополнительными данными, производит какие-либо еще вызовы — это уже системные действия (System).

2. Из каких частей состоит система журналирования log4j?

Система журналирования состоит из трёх основных частей:

  • управляющей журналированием - logger;

  • добавляющей в журнал - appender;

  • определяющей формат добавления - layout.

3. Что такое Logger в log4j?

Logger представляет собой объект класса org.apache.log4j.Logger, который используется как управляющий интерфейс для журналирования сообщений с возможностью задавать уровень детализации. Именно logger проверяет нужно ли обрабатывать сообщение и если журналирование необходимо, то сообщение передаётся в appender, если нет - система завершает обработку данного сообщения.

4. Что такое Appender в log4j?

Appender - это именованный объект журнала событий, реализующий интерфейс org.apache.log4j.Appender и добавляющий события в журнал. Appender вызывает разные вспомогательные инструменты - компоновщик, фильтр, обработчик ошибок (если они определены и необходимы). В ходе этой работы окончательно устанавливается необходимость записи сообщения, сообщению придаются окончательные содержание и форма.

В log4j журнал может представлять:

  • консоль;

  • файл;

  • сокет;

  • объект класса реализующего java.io.Writer или java.io.OutputStream;

  • JDBC хранилище;

  • тему (topic) JMS;

  • NT Event Log;

  • SMTP;

  • Syslog;

  • Telnet.

Наиболее часто используемые log4j appender-ы:

  • org.apache.log4j.ConsoleAppender - вывод в консоль;

  • org.apache.log4j.FileAppender - добавление в файл;

  • org.apache.log4j.DailyRollingFileAppender - добавление в файл с обновлением файла через заданный промежуток времени;

  • org.apache.log4j.RollingFileAppender - добавление в файл с обновлением файла по достижению определенного размера;

  • org.apache.log4j.varia.ExternallyRolledFileAppender - расширение RollingFileAppender обновляющее файл по команде принятой с заданного порта;

  • org.apache.log4j.net.SMTPAppender - сообщение по SMTP;

  • org.apache.log4j.AsyncAppender - позволяет, используя отдельный поток, организовать асинхронную работу, когда сообщения фиксируются лишь при достижении определенного уровня заполненности промежуточного буфера.

  • org.apache.log4j.nt.NTEventLogAppender - добавление в NT Event Log;

  • org.apache.log4j.net.SyslogAppender - добавление в Syslog;

  • org.apache.log4j.jdbc.JDBCAppender - запись в хранилище JDBC;

  • org.apache.log4j.lf5.LF5Appender - сообщение передаётся в специальный GUI интерфейс LogFactor5

  • org.apache.log4j.net.SocketAppender - трансляция сообщения по указанному адресу и порту;

  • org.apache.log4j.net.SocketHubAppender - рассылка сообщения сразу нескольким удалённым серверам, соединённым по заданному порту;

  • org.apache.log4j.net.TelnetAppender - отсылка сообщения по протоколу Telenet;

  • org.apache.log4j.net.JMSAppender - добавление сообщения в JMS.

5. Что такое Layout в log4j?

Layout - наследник класса org.apache.log4j.Layout предоставляющий возможность форматирования сообщения перед добавлением в журнал.

В log4j существуют следующие типы layout-ов:

  • org.apache.log4j.SimpleLayout - на выходе получается строка содержащая лишь уровень вывода и сообщение;

  • org.apache.log4j.HTMLLayout - форматирует сообщение в виде элемента HTML-таблицы;

  • org.apache.log4j.xml.XMLLayout - компонует сообщение в виде XML формате;

  • org.apache.log4j.TTCCLayout - на выходе сообщение дополняется информацией о времени, потоке, имени логгера и вложенном диагностическом контексте;

  • org.apache.log4j.PatternLayout / org.apache.log4j.EnhancedPatternLayout - настройка форматирования сообщения при помощи шаблона заданного пользователем.

6. Перечислите уровни журналирования в log4j? Назовите порядок их приоритетности.

  • OFF - отсутствие журналирования;

  • FATAL - фатальная ошибка;

  • ERROR - ошибка;

  • WARN - предупреждение;

  • INFO - информация;

  • DEBUG - детальная информация для отладки;

  • TRACE — трассировка всех сообщений.

Между уровнями логирования установлен следующий порядок приоритетов:

ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

7. Какие существуют способы конфигурирования log4j?

Для того, чтобы log4j начал работать нужно предоставить ему конфигурацию. Это можно сделать несколькими путями:

  • Создать конфигурацию программно, т.е. получить logger, определить уровень журналирования, прикрепить appender и задать способ форматирования.

  • Указать файл или URL как аргумент при запуске java-машины -Dlog4j.configuration=путь/к/файлу/конфигурации, а затем прочитать его в программе при помощи PropertyConfigurator.configure(...)/ DOMConfigurator.configure(...) для формата .properties или XML соответственно.

  • Загрузить конфигурацию из файла в формате XML или .properties: log4j ищет файл конфигурации в classpath. Сначала ищется файл log4j.xml и, если таковой не найден, - файл log4j.properties.

8. Источники