Принцип работы логеров и аппендеров.

Логеры - это экземпляры класса org.apache.log4j.Logger, вызывая методы которых в подсистему log4j посылается сообщение для логгинга.

Приоритет

Посылаемые сообщения различаются по приоритету:

  • FATAL - произошла фатальная ошибка - у этого сообщения наивысший приоритет
  • ERROR - в программе произошла ошибка
  • WARN - предупреждение в программе что-то не так
  • INFO - информация. К сведению трудящися.
  • DEBUG - детальная информация для отладки
  • TRACE - наиболее полная информация. трассировка выполнения программы. Наиболее низкий приоритет.
Чтобы послать сообщение нужного приоритета вызывается соответствующий метод:
LOG.info("информация");
LOG.error("произошла ошибка");
кроме того ещё есть методы с исключениями:
...
}catch(exception ex)
LOG.error("произошла ошибка", ex);
здесь в log4j попадает дополнительная инфомация о ошибке.

Имя

Кроме приоритета у логера есть имя. Имя задаётсяпри создании логера - это строка. Есть метод для создания логера по классу, что сделано для удобства и внутри log4j класс конвертируется в строку содержащую полное имя класса ( clazz.getName() )

в именах логеров реализовано "наследование" то на консоль попадают сообщения из всех классов пакета "mypackage". Наследование работает так: При логировании в логер с именем "mypackage.MyClass" происходит также логирование в логер с именем "mypackage" и в корневой логер (в него попадают вообще все сообщения).

Аппендеры

Аппендер - объект который опеределяет что нужно делать с логируемыыми сообщениями. Аппендеры описываются в настроечном файле (log4j.xml)чтобы вывод логов в рпоцессе эксплуатации приложения можно было легко менять.

Давайте рассмотрим типичное приложение. UML диаграмма типичного приложения с log4j В данном примере 2 класса в пакете mypackage. Каждый класс имеет Logger LOG. И log4j настроен так что от класса Servlet лог записывается в файл access.log, а от класса myDao в application.log. Ещё есть consoleAppender - он настроен для вывод на консоль. Т. к. В приведённом примере кода сообщения из логера ru.log4j.Servlet с приоритетом выше или равно INFO перенаправятся appender1. appender1, экземпляр FileAppender записывает (предварительноотформатировав) сообщения в файл access.log. логер "mypackage.MyClass" записывает соощения с приоритетом выше или равно ERROR в файл application.log. логер "mypackage" выводит соощения с приоритетом выше или равно DEBUG на консоль.