Учебники

log4j — Краткое руководство

log4j — Обзор

log4j — это надежная, быстрая и гибкая среда ведения журналов (API), написанная на Java, которая распространяется по лицензии Apache Software License.

log4j был портирован на языки C, C ++, C #, Perl, Python, Ruby и Eiffel.

log4j легко настраивается с помощью внешних файлов конфигурации во время выполнения. Он рассматривает процесс ведения журнала с точки зрения уровней приоритетов и предлагает механизмы для направления информации регистрации в самые разные пункты назначения, такие как база данных, файл, консоль, системный журнал UNIX и т. Д.

log4j состоит из трех основных компонентов:

  • Регистраторы : Ответственный за сбор информации журнала.

  • appenders : Отвечает за публикацию информации о регистрации в различных предпочтительных местах назначения.

  • макеты : отвечает за форматирование информации журнала в разных стилях.

Регистраторы : Ответственный за сбор информации журнала.

appenders : Отвечает за публикацию информации о регистрации в различных предпочтительных местах назначения.

макеты : отвечает за форматирование информации журнала в разных стилях.

История log4j

  • Создан в начале 1996 года в качестве API-интерфейса для проекта EU SEMPER (Безопасный электронный рынок для Европы).

  • После бесчисленных улучшений и нескольких воплощений первоначальный API превратился в log4j, популярный пакет журналирования для Java.

  • Пакет распространяется под Apache Software License, полноценной лицензией с открытым исходным кодом, сертифицированной в рамках инициативы с открытым исходным кодом.

  • Последнюю версию log4j, включая ее полный исходный код, файлы классов и документацию, можно найти по адресу http://logging.apache.org/log4j/ .

Создан в начале 1996 года в качестве API-интерфейса для проекта EU SEMPER (Безопасный электронный рынок для Европы).

После бесчисленных улучшений и нескольких воплощений первоначальный API превратился в log4j, популярный пакет журналирования для Java.

Пакет распространяется под Apache Software License, полноценной лицензией с открытым исходным кодом, сертифицированной в рамках инициативы с открытым исходным кодом.

Последнюю версию log4j, включая ее полный исходный код, файлы классов и документацию, можно найти по адресу http://logging.apache.org/log4j/ .

Особенности log4j

  • Это потокобезопасно.

  • Это оптимизировано для скорости.

  • Он основан на именованной иерархии логгеров.

  • Он поддерживает несколько выходных приложений для каждого регистратора.

  • Это поддерживает интернационализацию.

  • Это не ограничено предопределенным набором средств.

  • Поведение ведения журнала может быть установлено во время выполнения с помощью файла конфигурации.

  • Он предназначен для обработки исключений Java с самого начала.

  • Он использует несколько уровней, а именно ALL, TRACE, DEBUG, INFO, WARN, ERROR и FATAL.

  • Формат вывода журнала можно легко изменить, расширив класс Layout .

  • Цель вывода журнала, а также стратегия записи могут быть изменены реализациями интерфейса Appender.

  • Это аварийный останов. Однако, хотя он, безусловно, стремится обеспечить доставку, log4j не гарантирует, что каждый оператор журнала будет доставлен по назначению.

Это потокобезопасно.

Это оптимизировано для скорости.

Он основан на именованной иерархии логгеров.

Он поддерживает несколько выходных приложений для каждого регистратора.

Это поддерживает интернационализацию.

Это не ограничено предопределенным набором средств.

Поведение ведения журнала может быть установлено во время выполнения с помощью файла конфигурации.

Он предназначен для обработки исключений Java с самого начала.

Он использует несколько уровней, а именно ALL, TRACE, DEBUG, INFO, WARN, ERROR и FATAL.

Формат вывода журнала можно легко изменить, расширив класс Layout .

Цель вывода журнала, а также стратегия записи могут быть изменены реализациями интерфейса Appender.

Это аварийный останов. Однако, хотя он, безусловно, стремится обеспечить доставку, log4j не гарантирует, что каждый оператор журнала будет доставлен по назначению.

Плюсы и минусы лесозаготовок

Ведение журнала является важным компонентом разработки программного обеспечения. Хорошо написанный код регистрации обеспечивает быструю отладку, простое обслуживание и структурированное хранение информации времени выполнения приложения.

Ведение журнала также имеет свои недостатки. Это может замедлить работу приложения. Если слишком многословно, это может вызвать прокрутку слепоты. Чтобы облегчить эти проблемы, log4j разработан, чтобы быть надежным, быстрым и расширяемым.

Поскольку ведение журнала редко является основной задачей приложения, API log4j стремится быть простым для понимания и использования.

log4j — Установка

Пакет API log4j распространяется под лицензией Apache Software License, полноценной лицензией с открытым исходным кодом, сертифицированной по инициативе открытого исходного кода.

Последнюю версию log4j, включая полный исходный код, файлы классов и документацию, можно найти по адресу http://logging.apache.org/log4j/ .

Чтобы установить log4j в вашей системе, загрузите apache-log4j-xxxtar.gz с указанного URL-адреса и выполните приведенные ниже шаги.

Шаг 1

Разархивируйте и распакуйте загруженный файл в каталог / usr / local / следующим образом:

$ gunzip apache-log4j-1.2.15.tar.gz
$ tar -xvf apache-log4j-1.2.15.tar
apache-log4j-1.2.15/tests/input/
apache-log4j-1.2.15/tests/input/xml/
apache-log4j-1.2.15/tests/src/
apache-log4j-1.2.15/tests/src/java/
apache-log4j-1.2.15/tests/src/java/org/
.......................................

Несмотря на это, он создаст иерархию каталогов с именем apache-log4j-xxx следующим образом:

-rw-r--r--  1 root root   3565 2007-08-25 00:09 BUILD-INFO.txt
-rw-r--r--  1 root root   2607 2007-08-25 00:09 build.properties.sample
-rw-r--r--  1 root root  32619 2007-08-25 00:09 build.xml
drwxr-xr-x 14 root root   4096 2010-02-04 14:09 contribs
drwxr-xr-x  5 root root   4096 2010-02-04 14:09 examples
-rw-r--r--  1 root root   2752 2007-08-25 00:09 INSTALL
-rw-r--r--  1 root root   4787 2007-08-25 00:09 KEYS
-rw-r--r--  1 root root  11366 2007-08-25 00:09 LICENSE
-rw-r--r--  1 root root 391834 2007-08-25 00:29 log4j-1.2.15.jar
-rw-r--r--  1 root root    160 2007-08-25 00:09 NOTICE
-rwxr-xr-x  1 root root  10240 2007-08-25 00:27 NTEventLogAppender.dll
-rw-r--r--  1 root root  17780 2007-08-25 00:09 pom.xml
drwxr-xr-x  7 root root   4096 2007-08-25 00:13 site
drwxr-xr-x  8 root root   4096 2010-02-04 14:08 src
drwxr-xr-x  6 root root   4096 2010-02-04 14:09 tests

Шаг 2

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

  • JavaMail API: функция ведения журнала на основе электронной почты в log4j требует, чтобы Java Mail API (mail.jar) был установлен на вашем компьютере из glassfish.dev .

  • JavaBeans Activation Framework: Java Mail API также потребует, чтобы JavaBeans Activation Framework (активации.jar) был установлен на вашем компьютере с http://java.sun.com/products/javabeans/jaf/index.jsp .

  • Служба сообщений Java: JMS-совместимые функции log4j потребуют, чтобы на вашем компьютере были установлены как JMS, так и JNDI именования и интерфейса каталогов Java с http://java.sun.com/products/jms .

  • Анализатор XML: вам нужен JAXP-совместимый анализатор XML, чтобы использовать log4j. Убедитесь, что на вашем компьютере установлен Xerces.jar с http://xerces.apache.org/xerces-j/install.html .

JavaMail API: функция ведения журнала на основе электронной почты в log4j требует, чтобы Java Mail API (mail.jar) был установлен на вашем компьютере из glassfish.dev .

JavaBeans Activation Framework: Java Mail API также потребует, чтобы JavaBeans Activation Framework (активации.jar) был установлен на вашем компьютере с http://java.sun.com/products/javabeans/jaf/index.jsp .

Служба сообщений Java: JMS-совместимые функции log4j потребуют, чтобы на вашем компьютере были установлены как JMS, так и JNDI именования и интерфейса каталогов Java с http://java.sun.com/products/jms .

Анализатор XML: вам нужен JAXP-совместимый анализатор XML, чтобы использовать log4j. Убедитесь, что на вашем компьютере установлен Xerces.jar с http://xerces.apache.org/xerces-j/install.html .

Шаг 3

Теперь вам нужно правильно настроить переменные CLASSPATH и PATH . Здесь мы собираемся установить его только для файла log4j.xxxjar.

$ pwd
/usr/local/apache-log4j-1.2.15
$ export CLASSPATH= \
      $CLASSPATH:/usr/local/apache-log4j-1.2.15/log4j-1.2.15.jar
$ export PATH=$PATH:/usr/local/apache-log4j-1.2.15/

log4j — Архитектура

API log4j использует многоуровневую архитектуру, в которой каждый слой предоставляет разные объекты для выполнения разных задач. Эта многоуровневая архитектура делает дизайн гибким и легко расширяемым в будущем.

Есть два типа объектов, доступных с каркасом log4j.

  • Основные объекты: это обязательные объекты фреймворка. Они обязаны использовать рамки.

  • Объекты поддержки: это необязательные объекты каркаса. Они поддерживают основные объекты для выполнения дополнительных, но важных задач.

Основные объекты: это обязательные объекты фреймворка. Они обязаны использовать рамки.

Объекты поддержки: это необязательные объекты каркаса. Они поддерживают основные объекты для выполнения дополнительных, но важных задач.

Основные объекты

Основные объекты включают в себя следующие типы объектов:

Объект Logger

Слой верхнего уровня — это Logger, который предоставляет объект Logger. Объект Logger отвечает за сбор информации журналов, и они хранятся в иерархии пространства имен.

Макет объекта

Слой макета предоставляет объекты, которые используются для форматирования информации журнала в разных стилях. Он обеспечивает поддержку объектов appender перед публикацией информации журнала.

Объекты макета играют важную роль в публикации журнальной информации таким образом, чтобы ее можно было читать и использовать повторно.

Объект Appender

Это слой более низкого уровня, который предоставляет объекты Appender. Объект Appender отвечает за публикацию информации журнала в различных предпочтительных местах назначения, таких как база данных, файл, консоль, системный журнал UNIX и т. Д.

Следующая виртуальная диаграмма показывает компоненты каркаса log4J:

log4j Архитектура

Объекты поддержки

В структуре log4j есть и другие важные объекты, которые играют жизненно важную роль в структуре ведения журнала:

Уровень объекта

Объект Level определяет гранулярность и приоритет любой информации журналирования. В API определены семь уровней ведения журнала: OFF, DEBUG, INFO, ERROR, WARN, FATAL и ALL.

Фильтровать объект

Объект Filter используется для анализа информации журналов и принятия дальнейших решений о том, должна ли эта информация регистрироваться или нет.

Объекты Appender могут иметь несколько объектов Filter, связанных с ними. Если информация о регистрации передается конкретному объекту Appender, все объекты Filter, связанные с этим Appender, должны утвердить информацию о регистрации, прежде чем ее можно будет опубликовать в подключенном месте назначения.

ObjectRenderer

Объект ObjectRenderer специализируется на предоставлении представления String различных объектов, передаваемых в каркас ведения журнала. Этот объект используется объектами Layout для подготовки окончательной информации о регистрации.

LogManager

Объект LogManager управляет каркасом ведения журнала. Он отвечает за чтение начальных параметров конфигурации из общесистемного файла конфигурации или класса конфигурации.

log4j — Конфигурация

В предыдущей главе объяснялись основные компоненты log4j. В этой главе объясняется, как вы можете настроить основные компоненты, используя файл конфигурации. Конфигурирование log4j включает в себя назначение уровня, определение Appender и указание объектов Layout в файле конфигурации.

Файл log4j.properties — это файл конфигурации log4j, в котором свойства хранятся в парах ключ-значение. По умолчанию LogManager ищет файл с именем log4j.properties в CLASSPATH .

  • Уровень корневого логгера определяется как DEBUG. Отладка прикрепляет к нему аппендиат по имени X.

  • Установите приложение с именем X в качестве допустимого приложения.

  • Установите макет для приложения X.

Уровень корневого логгера определяется как DEBUG. Отладка прикрепляет к нему аппендиат по имени X.

Установите приложение с именем X в качестве допустимого приложения.

Установите макет для приложения X.

log4j.properties Синтаксис:

Ниже приведен синтаксис файла log4j.properties для приложения X:

# Define the root logger with appender X
log4j.rootLogger = DEBUG, X

# Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender

# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n

Пример log4j.properties

Используя приведенный выше синтаксис, мы определяем следующее в файле log4j.properties :

  • Уровень корневого логгера определяется как DEBUG, приложение DEBUG с именем FILE.

  • ФАЙЛ appender определяется как org.apache.log4j.FileAppender . Он записывает в файл с именем «log.out», расположенный в каталоге журнала .

  • Определен шаблон макета % m% n , что означает, что за напечатанным сообщением журнала будет следовать символ новой строки.

Уровень корневого логгера определяется как DEBUG, приложение DEBUG с именем FILE.

ФАЙЛ appender определяется как org.apache.log4j.FileAppender . Он записывает в файл с именем «log.out», расположенный в каталоге журнала .

Определен шаблон макета % m% n , что означает, что за напечатанным сообщением журнала будет следовать символ новой строки.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Важно отметить, что log4j поддерживает подстановку переменных в стиле UNIX, например, $ {variableName}.

Уровень отладки

Мы использовали DEBUG с обоими наложителями. Все возможные варианты:

  • TRACE
  • DEBUG
  • ИНФОРМАЦИЯ
  • WARN
  • ОШИБКА
  • FATAL
  • ВСЕ

Эти уровни будут объяснены в log4j Уровни ведения журнала .

Appenders

Apache log4j предоставляет объекты Appender, которые в первую очередь отвечают за печать сообщений журнала в разные пункты назначения, такие как консоли, файлы, сокеты, журналы событий NT и т. Д.

Каждый объект Appender имеет различные свойства, связанные с ним, и эти свойства указывают поведение этого объекта.

Имущество Описание
расположение Appender использует объекты Layout и связанный с ними шаблон преобразования для форматирования информации журнала.
цель Целевой объект может быть консолью, файлом или другим элементом в зависимости от приложения.
уровень Уровень необходим для управления фильтрацией сообщений журнала.
порог Appender может иметь пороговый уровень, связанный с ним, независимо от уровня регистратора. Appender игнорирует все сообщения журнала, уровень которых ниже порогового уровня.
фильтр Объекты Filter могут анализировать информацию журналирования за пределами соответствия уровня и решать, обрабатывать ли запросы журналирования конкретным Appender или игнорировать.

Мы можем добавить объект Appender в Logger, включив следующий параметр в файл конфигурации следующим способом:

log4j.logger.[logger-name]=level, appender1,appender..n

Вы можете написать ту же конфигурацию в формате XML следующим образом:

<logger name="com.apress.logging.log4j" additivity="false">
   <appender-ref ref="appender1"/>
   <appender-ref ref="appender2"/>
</logger>

Если вы хотите добавить объект Appender в вашу программу, вы можете использовать следующий метод:

public void addAppender(Appender appender);

Метод addAppender () добавляет Appender к объекту Logger. Как показывает пример конфигурации, можно добавить множество объектов Appender в регистратор в список через запятую, каждый из которых печатает информацию журналирования по отдельным адресатам.

В нашем примере выше мы использовали только один appA FileAppender . Все возможные варианты приложения:

  • AppenderSkeleton
  • AsyncAppender
  • ConsoleAppender
  • DailyRollingFileAppender
  • ExternallyRolledFileAppender
  • FileAppender
  • JDBCAppender
  • JMSAppender
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • RollingFileAppender
  • SMTPAppender
  • SocketAppender
  • SocketHubAppender
  • SyslogAppender
  • TelnetAppender
  • WriterAppender

Мы бы рассмотрели FileAppender в разделе « Вход в файлы», а JDBC Appender — в разделе « Вход в базу данных» .

раскладка

Мы использовали PatternLayout с нашим appender. Все возможные варианты:

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

Используя HTMLLayout и XMLLayout, вы можете создавать журналы в HTML, а также в формате XML.

Форматирование форматирования

Вы научитесь форматировать сообщение журнала в главе « Форматирование журнала» .

log4j — пример программы

Мы видели, как создать файл конфигурации. В этой главе описывается, как создавать сообщения отладки и записывать их в простой текстовый файл.

Ниже приведен простой файл конфигурации, созданный для нашего примера. Давайте пересмотрим это еще раз:

  • Уровень корневого регистратора определяется как DEBUG и присоединяет к нему appender с именем FILE.

  • ФАЙЛ appender определяется как org.apache.log4j.FileAppender и выполняет запись в файл с именем «log.out», расположенный в каталоге журнала .

  • Определен шаблон макета% m% n, что означает, что за напечатанным сообщением журнала будет следовать символ новой строки.

Уровень корневого регистратора определяется как DEBUG и присоединяет к нему appender с именем FILE.

ФАЙЛ appender определяется как org.apache.log4j.FileAppender и выполняет запись в файл с именем «log.out», расположенный в каталоге журнала .

Определен шаблон макета% m% n, что означает, что за напечатанным сообщением журнала будет следовать символ новой строки.

Содержимое файла log4j.properties выглядит следующим образом:

# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Использование log4j в программе Java

Следующий класс Java является очень простым примером, который инициализирует, а затем использует библиотеку журналов Log4J для приложений Java.

import org.apache.log4j.Logger;

import java.io.*;
import java.sql.SQLException;
import java.util.*;

public class log4jExample{
   /* Get actual class name to be printed on */
   static Logger log = Logger.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Hello this is a debug message");
      log.info("Hello this is an info message");
   }
}

Компилировать и выполнять

Вот шаги для компиляции и запуска вышеупомянутой программы. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Все библиотеки должны быть доступны в CLASSPATH, а ваш файл log4j.properties должен быть доступен в PATH. Следуйте инструкциям ниже:

  • Создайте log4j.properties, как показано выше.

  • Создайте log4jExample.java, как показано выше, и скомпилируйте его.

  • Выполните двоичный файл log4jExample для запуска программы.

Создайте log4j.properties, как показано выше.

Создайте log4jExample.java, как показано выше, и скомпилируйте его.

Выполните двоичный файл log4jExample для запуска программы.

Вы получите следующий результат в файле /usr/home/log4j/log.out:

Hello this is a debug message
Hello this is an info message

log4j — Методы регистрации

Класс Logger предоставляет множество методов для обработки действий журналирования. Класс Logger не позволяет нам создавать новый экземпляр Logger, но предоставляет два статических метода для получения объекта Logger:

  • публичный статический регистратор getRootLogger ();
  • публичный статический Logger getLogger (имя строки);

Первый из двух методов возвращает корневой регистратор экземпляра приложения, и у него нет имени.

Любой другой именованный экземпляр объекта Logger получается с помощью второго метода, передавая имя регистратора. Имя регистратора может быть любой строкой, которую вы можете передать, обычно именем класса или пакета, как мы использовали в предыдущей главе, и оно упоминается ниже:

static Logger log = Logger.getLogger(log4jExample.class.getName());

Методы ведения журнала

Получив экземпляр именованного регистратора, мы можем использовать несколько методов регистратора для регистрации сообщений. Класс Logger имеет следующие методы для печати информации журнала.

Sr.No Методы и описание
1 public void debug (объектное сообщение)

Он печатает сообщения с уровнем Level.DEBUG.

2 публичная ошибка void (сообщение объекта)

Он печатает сообщения с уровнем Level.ERROR.

3 public void fatal (Сообщение объекта);

Он печатает сообщения с уровнем Level.FATAL.

4 публичная информация о пустоте (объект сообщения);

Он печатает сообщения с уровнем Level.INFO.

5 public void warn (Сообщение объекта);

Он печатает сообщения с уровнем Level.WARN.

6 public void trace (Object message);

Он печатает сообщения с уровнем Level.TRACE.

Он печатает сообщения с уровнем Level.DEBUG.

Он печатает сообщения с уровнем Level.ERROR.

Он печатает сообщения с уровнем Level.FATAL.

Он печатает сообщения с уровнем Level.INFO.

Он печатает сообщения с уровнем Level.WARN.

Он печатает сообщения с уровнем Level.TRACE.

Все уровни определены в классе org.apache.log4j.Level, и любой из вышеупомянутых методов может быть вызван следующим образом:

import org.apache.log4j.Logger;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
   
   public static void main(String[] args) {
      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

Когда вы компилируете и запускаете программу LogClass, она выдаст следующий результат:

Debug Message!
Info Message!
Warn Message!
Error Message!
Fatal Message!

Все сообщения отладки имеют больше смысла, когда они используются в сочетании с уровнями. Мы рассмотрим уровни в следующей главе, а затем у вас будет хорошее понимание того, как использовать эти методы в сочетании с различными уровнями отладки.

log4j — Уровни регистрации

Класс org.apache.log4j.Level предоставляет следующие уровни. Вы также можете определить свои пользовательские уровни путем подкласса класса Level.

уровень Описание
ВСЕ Все уровни, включая пользовательские уровни.
DEBUG Обозначает детализированные информационные события, которые наиболее полезны для отладки приложения.
ИНФОРМАЦИЯ Обозначает информационные сообщения, которые освещают прогресс приложения на крупном уровне.
WARN Обозначает потенциально вредные ситуации.
ОШИБКА Обозначает события ошибок, которые могут все еще позволить приложению продолжать работать.
FATAL Обозначает очень серьезные события ошибок, которые, вероятно, приведут к прекращению работы приложения.
OFF Максимально возможный ранг и предназначен для отключения регистрации.
TRACE Обозначает более мелкие информационные события, чем DEBUG.

Как работают уровни?

Запрос журнала уровня p в логгере с уровнем q включается, если p> = q. Это правило лежит в основе log4j. Предполагается, что уровни упорядочены. Для стандартных уровней у нас есть ALL <DEBUG <INFO <WARN <ERROR <FATAL <OFF.

В следующем примере показано, как мы можем отфильтровать все наши сообщения DEBUG и INFO. Эта программа использует метод ведения журнала setLevel (Level.X) для установки желаемого уровня ведения журнала:

Этот пример напечатает все сообщения, кроме Debug и Info:

import org.apache.log4j.*;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
   
   public static void main(String[] args) {
      log.setLevel(Level.WARN);

      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

Когда вы компилируете и запускаете программу LogClass, она выдаст следующий результат:

Warn Message!
Error Message!
Fatal Message!

Настройка уровней с помощью файла конфигурации

log4j предоставляет вам настройку уровня файла конфигурации, которая освобождает вас от изменения исходного кода, когда вы хотите изменить уровень отладки.

Ниже приведен пример файла конфигурации, который будет выполнять ту же задачу, что и мы, используя метод log.setLevel (Level.WARN) в приведенном выше примере.

# Define the root logger with appender file
log = /usr/home/log4j
log4j.rootLogger = WARN, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Давайте теперь воспользуемся нашей следующей программой:

import org.apache.log4j.*;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);
   public static void main(String[] args) {
      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

Теперь скомпилируйте и запустите вышеуказанную программу, и вы получите следующий результат в файле /usr/home/log4j/log.out:

Warn Message!
Error Message!
Fatal Message!

log4j — Форматирование журнала

Apache log4j предоставляет различные объекты Layout, каждый из которых может форматировать данные журналов в соответствии с различными макетами. Также возможно создать объект Layout, который форматирует данные регистрации специфичным для приложения способом.

Все объекты Layout получают объект LoggingEvent от объектов Appender. Затем объекты Layout получают аргумент сообщения из LoggingEvent и применяют соответствующий ObjectRenderer для получения строкового представления сообщения.

Типы макетов

Класс верхнего уровня в иерархии — это абстрактный класс org.apache.log4j.Layout. Это базовый класс для всех других классов Layout в log4j API.

Класс Layout определен как абстрактный в приложении, мы никогда не используем этот класс напрямую; вместо этого мы работаем с его подклассами:

DateLayout

HTMLLayout

PatternLayout.

SimpleLayout

XMLLayout

Методы размещения

Этот класс обеспечивает каркасную реализацию всех общих операций для всех других объектов Layout и объявляет два абстрактных метода.

Sr.No. Методы и описание
1 открытый абстрактный логический ignoresThrowable ()

Он указывает, обрабатывает ли информация регистрации какой-либо объект java.lang.Throwable, переданный ему как часть события регистрации. Если объект Layout обрабатывает объект Throwable, то объект Layout не игнорирует его и возвращает false.

2 открытый абстрактный формат String (событие LoggingEvent)

Отдельные подклассы макета реализуют этот метод для форматирования, специфичного для макета.

Он указывает, обрабатывает ли информация регистрации какой-либо объект java.lang.Throwable, переданный ему как часть события регистрации. Если объект Layout обрабатывает объект Throwable, то объект Layout не игнорирует его и возвращает false.

Отдельные подклассы макета реализуют этот метод для форматирования, специфичного для макета.

Помимо этих абстрактных методов, класс Layout предоставляет конкретную реализацию для методов, перечисленных ниже:

Sr.No. Методы и описание
1 public String getContentType ()

Возвращает тип содержимого, используемый объектами Layout. Базовый класс возвращает text / plain в качестве типа содержимого по умолчанию.

2 public String getFooter ()

Он определяет информацию нижнего колонтитула сообщения регистрации.

3 public String getHeader ()

Он определяет информацию заголовка сообщения регистрации.

Возвращает тип содержимого, используемый объектами Layout. Базовый класс возвращает text / plain в качестве типа содержимого по умолчанию.

Он определяет информацию нижнего колонтитула сообщения регистрации.

Он определяет информацию заголовка сообщения регистрации.

Каждый подкласс может возвращать специфичную для класса информацию, переопределяя конкретную реализацию этих методов.

log4j — вход в файлы

Чтобы записать свою регистрационную информацию в файл, вам необходимо использовать org.apache.log4j.FileAppender .

Конфигурация FileAppender

FileAppender имеет следующие настраиваемые параметры:

Имущество Описание
immediateFlush Этот флаг по умолчанию имеет значение true, что означает, что поток вывода в файл сбрасывается при каждой операции добавления.
кодирование Можно использовать любую кодировку символов. По умолчанию это специфичная для платформы схема кодирования.
порог Пороговый уровень для этого приложения.
Имя файла Имя файла журнала.
FileAppend По умолчанию установлено значение true, что означает, что информация о журнале добавляется в конец того же файла.
bufferedIO Этот флаг указывает, нужно ли нам включить буферизованную запись. По умолчанию установлено значение false.
размер буфера Если буферизованный ввод / вывод включен, он указывает размер буфера. По умолчанию он установлен на 8 КБ.

Ниже приведен пример файла конфигурации log4j.properties для FileAppender.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, overwrite
log4j.appender.FILE.Append=false

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Если вы хотите иметь файл конфигурации XML, эквивалентный указанному выше файлу log4j.properties , то вот содержимое:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="FILE" class="org.apache.log4j.FileAppender">
   <param name="file" value="${log}/log.out"/>
   <param name="immediateFlush" value="true"/>
   <param name="threshold" value="debug"/>
   <param name="append" value="false"/>
   <layout class="org.apache.log4j.PatternLayout">
      <param name="conversionPattern" value="%m%n"/>
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="FILE"/>
</logger>

</log4j:configuration>

Вы можете попробовать log4j — пример программы с вышеуказанной конфигурацией.

Вход в несколько файлов

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

Чтобы записать информацию о регистрации в несколько файлов, вам необходимо использовать класс org.apache.log4j.RollingFileAppender, который расширяет класс FileAppender и наследует все его свойства.

У нас есть следующие настраиваемые параметры в дополнение к упомянутым выше для FileAppender:

Имущество Описание
MaxFileSize Это критический размер файла, выше которого файл будет свернут. Значение по умолчанию составляет 10 МБ.
maxBackupIndex Это свойство обозначает количество создаваемых файлов резервных копий. Значением по умолчанию является 1.

Ниже приведен пример файла конфигурации log4j.properties для RollingFileAppender.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the maximum file size before rollover
log4j.appender.FILE.MaxFileSize=5KB

# Set the the backup index
log4j.appender.FILE.MaxBackupIndex=2

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Если вы хотите иметь файл конфигурации XML, вы можете сгенерировать то же, что упомянуто в начальном разделе, и добавить только дополнительные параметры, относящиеся к RollingFileAppender .

Этот пример конфигурации демонстрирует, что максимально допустимый размер каждого файла журнала составляет 5 МБ. При превышении максимального размера будет создан новый файл журнала. Поскольку maxBackupIndex определено как 2, как только второй файл журнала достигнет максимального размера, первый файл журнала будет удален, и после этого вся информация журнала будет откатана до первого файла журнала.

Вы можете попробовать log4j — пример программы с вышеуказанной конфигурацией.

Генерация ежедневного журнала

Может потребоваться, чтобы ваши файлы журналов создавались ежедневно, чтобы вести чистую запись вашей информации журналов.

Чтобы ежедневно записывать информацию о журналировании в файлы, вы должны будете использовать класс org.apache.log4j.DailyRollingFileAppender, который расширяет класс FileAppender и наследует все его свойства.

Существует только один важный настраиваемый параметр в дополнение к упомянутым выше для FileAppender:

Имущество Описание
DatePattern Это указывает, когда следует пролонгировать файл и соблюдать соглашение о присвоении имен. По умолчанию перенос выполняется в полночь каждый день.

DatePattern управляет расписанием опрокидывания, используя один из следующих шаблонов:

DatePattern Описание
» гггг-ММ Перевернитесь в конце каждого месяца и в начале следующего месяца.
» YYYY-MM-дд Перевернитесь в полночь каждый день. Это значение по умолчанию.
» гггг-ММ-дд-а Перевернитесь в полдень и полночь каждого дня.
» гггг-ММ-дд-НН Переверните вверху каждого часа.
» гггг-ММ-дд-мм-НН Перевернись каждую минуту.
» гггг-WW Сверните в первый день каждой недели в зависимости от региона.

Ниже приведен пример файла конфигурации log4j.properties для создания файлов журналов, обновляемых в полдень и полночь каждого дня.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the DatePattern
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Если вы хотите иметь файл конфигурации XML, вы можете сгенерировать то же, что упомянуто в начальном разделе, и добавить только дополнительные параметры, связанные с DailyRollingFileAppender .

Вы можете попробовать log4j — пример программы с вышеуказанной конфигурацией.

log4j — вход в базу данных

API log4j предоставляет объект org.apache.log4j.jdbc.JDBCAppender , который может помещать информацию журнала в указанную базу данных.

Конфигурация JDBCAppender

Имущество Описание
размер буфера Устанавливает размер буфера. Размер по умолчанию — 1.
Водитель Устанавливает класс драйвера в указанную строку. Если класс драйвера не указан, по умолчанию используется sun.jdbc.odbc.JdbcOdbcDriver.
расположение Устанавливает макет, который будет использоваться. Макет по умолчанию — org.apache.log4j.PatternLayout.
пароль Устанавливает пароль базы данных.
SQL Указывает инструкцию SQL, которая будет выполняться каждый раз, когда происходит событие регистрации. Это может быть INSERT, UPDATE или DELETE.
URL Устанавливает URL JDBC.
пользователь Устанавливает имя пользователя базы данных.

Конфигурация таблицы журнала

Прежде чем вы начнете использовать ведение журнала на основе JDBC, вы должны создать таблицу для ведения всей информации журнала. Ниже приведен SQL-оператор для создания таблицы LOGS:

CREATE TABLE LOGS
   (USER_ID VARCHAR(20) NOT NULL,
    DATED   DATE NOT NULL,
    LOGGER  VARCHAR(50) NOT NULL,
    LEVEL   VARCHAR(10) NOT NULL,
    MESSAGE VARCHAR(1000) NOT NULL
   );

Пример файла конфигурации

Ниже приведен пример файла конфигурации log4j.properties для JDBCAppender, который будет использоваться для регистрации сообщений в таблице LOGS.

# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver

# Set database user name and password
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

Для базы данных MySQL вам нужно будет использовать фактическое имя DBNAME, идентификатор пользователя и пароль, где вы создали таблицу LOGS. Оператор SQL должен выполнить оператор INSERT с именем таблицы LOGS и значениями, которые будут введены в таблицу.

JDBCAppender не нуждается в явном определении макета. Вместо этого SQL-оператор, переданный ему, использует PatternLayout.

Если вы хотите иметь файл конфигурации XML, эквивалентный указанному выше файлу log4j.properties , то вот содержимое:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
   <param name="url" value="jdbc:mysql://localhost/DBNAME"/>
   <param name="driver" value="com.mysql.jdbc.Driver"/>
   <param name="user" value="user_id"/>
   <param name="password" value="password"/>
   <param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/>
   <layout class="org.apache.log4j.PatternLayout">
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="DB"/>
</logger>

</log4j:configuration>

Пример программы

Следующий класс Java является очень простым примером, который инициализирует, а затем использует библиотеку журналов Log4J для приложений Java.

import org.apache.log4j.Logger;
import java.sql.*;
import java.io.*;
import java.util.*;

public class log4jExample{
   /* Get actual class name to be printed on */
   static Logger log = Logger.getLogger(log4jExample.class.getName());
   
   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Debug");
      log.info("Info");
   }
}

Компилировать и выполнять

Вот шаги для компиляции и запуска вышеупомянутой программы. Убедитесь, что вы правильно установили PATH и CLASSPATH, прежде чем приступить к компиляции и выполнению.

Все библиотеки должны быть доступны в CLASSPATH, а ваш файл log4j.properties должен быть доступен в PATH. Выполните данные шаги:

  • Создайте log4j.properties, как показано выше.
  • Создайте log4jExample.java, как показано выше, и скомпилируйте его.
  • Выполните двоичный файл log4jExample для запуска программы.

Теперь проверьте вашу таблицу LOGS в базе данных DBNAME, и вы найдете следующие записи:

mysql >  select * from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED      | LOGGER       | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
|         | 2010-05-13 | log4jExample | DEBUG | Debug   |
|         | 2010-05-13 | log4jExample | INFO  | Info    |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

Примечание. Здесь x используется для вывода вложенного диагностического контекста (NDC), связанного с потоком, который сгенерировал событие регистрации. Мы используем NDC для различения клиентов в серверных компонентах, обрабатывающих несколько клиентов. Проверьте Log4J Manual для получения дополнительной информации об этом.