Состав компонентов Log4j
Log4j состоит из трех важных компонентов:
1. Приоритет информации журнала (Logger)
2. Место назначения вывода информации журнала (Appender).
3. Формат вывода (макет) информации журнала.
краткое содержание:
Приоритеты информации журнала от высокого до низкого включают ERROR, WARN, INFO и DEBUG, которые используются для указания важности этой информации журнала соответственно;
Место вывода информации журнала указывает, будет ли журнал распечатан на консоли или в файл;
Формат вывода управляет отображением содержимого журнала.
Введение в Log4j
Log4j — это проект Apache с открытым исходным кодом. Используя Log4j, мы можем контролировать назначение передачи информации журнала на консоли, файлы, компоненты графического интерфейса и даже серверы сокетов, регистраторы событий NT, демоны системного журнала UNIX и т. д.; формат вывода каждого журнала. Определив уровень информации каждого журнала, мы можем более детально контролировать процесс создания журнала. log4j -- журнал для Java (журнал Java).
Адрес загрузки Log4j: http://logging.apache.org/log4j/2.x/download.html.
Формат файла конфигурации Log4j
Log4j поддерживает два формата файлов конфигурации:
1. Файлы формата XML
2. Файлы в формате свойств
Вы также можете вообще не использовать файл конфигурации, а настроить среду Log4j в коде. Однако использование файлов конфигурации сделает ваше приложение более гибким.
Файл конфигурации определения Log4j
1. Настройте корневой регистратор
Его синтаксис:
Описание параметра:
Уровень — это приоритет ведения журнала, который делится на ВЫКЛ, ФАТАЛЬНЫЙ, ОШИБКА, ПРЕДУПРЕЖДЕНИЕ, ИНФОРМАЦИЯ, ОТЛАДКА, ВСЕ или уровень, который вы определяете.
Off: самый высокий уровень, используемый для отключения всех журналов.
Неустранимая: указывает, что каждое событие фатальной ошибки приведет к завершению работы приложения.
Ошибка: указывает на то, что хотя и произошло событие ошибки, оно все равно не влияет на дальнейшую работу системы.
Предупреждение: указывает на то, что может возникнуть потенциальная ошибка.
Информация: обычно используется на грубом уровне, подчеркивая весь работающий процесс приложения.
Отладка: в общем и на грубом уровне, с акцентом на весь работающий процесс приложения.
Все: самый низкий уровень, используемый для включения всех журналов.
Log4j рекомендует использовать только четыре уровня: приоритеты от высокого к низкому: ОШИБКА, ПРЕДУПРЕЖДЕНИЕ, ИНФОРМАЦИЯ и ОТЛАДКА. С помощью определенных здесь уровней вы можете контролировать включение и выключение соответствующего уровня информации журнала в приложении.
AppenderName указывает на то, куда выводятся данные журнала, и одновременно можно указать несколько мест назначения вывода.
2. Настройте место назначения вывода информации журнала Appender.
Его синтаксис:
log4j.appender.appenderName.option1 = значение1
...
log4j.appender.appenderName.option = значениеN
org.apache.log4j.ConsoleAppender(Консоль)
org.apache.log4j.FileAppender(Файл)
org.apache.log4j.DailyRollingFileAppender (каждый день генерирует файл журнала)
org.apache.log4j.RollingFileAppender (генерирует новый файл, когда размер файла достигает указанного размера)
org.apache.log4j.WriterAppender (отправляет информацию журнала в потоковом формате в любое указанное место)
3. Настройте формат информации журнала.
Синтаксис:
log4j.appender.appenderName.layout.option1 = значение1 …
log4j.appender.appenderName.layout.option = valueN
org.apache.log4j.HTMLLayout (макет в формате таблицы HTML),
org.apache.log4j.PatternLayout (можно гибко указывать шаблоны макета),
org.apache.log4j.SimpleLayout (содержит уровень и информационную строку информации журнала),
org.apache.log4j.TTCCLayout (содержит информацию о времени создания журнала, потоке, категории и т. д.)
Log4J использует формат печати, аналогичный функции printf на языке C, для форматирования информации журнала. Параметры печати следующие:
%mВыведите сообщение, указанное в коде
Приоритет вывода %p, а именно DEBUG, INFO, WARN, ERROR, FATAL.
%r выводит количество миллисекунд, прошедших с момента запуска приложения до вывода информации журнала.
%c выводит категорию, к которой он принадлежит, обычно полное имя класса.
%tВыведите имя потока, создавшего событие журнала.
%n выводит символ возврата каретки и перевода строки, который равен «rn» на платформе Windows и «n» на платформе Unix.
%d выводит дату или время точки времени журнала. Формат по умолчанию — ISO8601. Вы также можете указать формат позже, например: %d{yyyMMMddHH:mm:ss,SSS}. Вывод аналогичен: 18 октября. 2002 22:10:28921
%l Выводит место, где произошло событие журнала, включая имя категории, поток, в котором оно произошло, и номер строки кода. Пример: Testlog4.main(TestLog4.java:10)
%x: выводит NDC (вложенную диагностическую среду), связанную с текущим потоком, особенно используемую в многоклиентских и многопоточных приложениях, таких как javaservlets.
%%: вывести символ «%». %F: вывести имя файла, в котором создается сообщение журнала.
%L: номер строки в выходном коде.
%m: вывести сообщение, указанное в коде, и конкретную сгенерированную информацию журнала.
%n: выводит символ возврата каретки и перевода строки, то есть «/r/n» на платформе Windows и «/n» на платформе Unix. При выводе информации журнала вы можете добавить модификаторы между % и символом режима. контролировать его минимальную и максимальную ширину, а также выравнивание текста.
нравиться:
1)%20c: укажите имя выходной категории. Минимальная ширина — 20. Если имя категории меньше 20, по умолчанию оно будет выровнено по правому краю.
2)%-20c: укажите имя выходной категории. Минимальная ширина — 20. Если имя категории меньше 20, знак «-» указывает выравнивание по левому краю.
3)%.30c: укажите имя выходной категории. Максимальная ширина — 30. Если имя категории больше 30, лишние символы слева будут обрезаны, а если меньше 30, то будут обрезаны. быть без пробелов.
4)%20.30c: Если имя категории содержит менее 20 символов, заполните пробелы и выровняйте его по правому краю. Если имя длиннее 30 символов, обрежьте символы с левой стороны.
Метод настройки log4j.xml
<?xml version="1.0"coding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appender1"
>
<param name="File" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<макет>
</макет>
</appender>
<корень>
<level value="отладка" />
<appender-ref ref="appender1" />
</корень>
</log4j:конфигурация>
Прежде чем использовать Log4j в программе, сначала импортируйте commons-logging.jar и logging-log4j-1.2.9.jar в путь к классам и поместите log4j.properties в корневой каталог src. Чтобы использовать log4j в классе, сначала объявите статическую переменную Loggerlogger=Logger.getLog("classname"). Теперь ее можно использовать.
Используется следующим образом: logger.debug("debugmessage") или logger.info("infomessage").
1. Получите регистратор
При использовании Log4j первым шагом является получение регистратора, который будет отвечать за контроль информации журнала.
Его синтаксис:
publicstaticLoggergetLogger(имя_строки)
Получает средство ведения журнала по указанному имени и, при необходимости, создает новое средство ведения журнала с этим именем. Имя обычно принимает имя этого класса, например:
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. Прочтите файл конфигурации.
После получения регистратора вторым шагом является настройка среды Log4j. Синтаксис следующий:
BasicConfigurator.configure(): автоматически и быстро использовать среду Log4j по умолчанию.
PropertyConfigurator.configure(StringconfigFilename): чтение файла конфигурации, записанного с использованием файла свойств Java.
DOMConfigurator.configure(Stringfilename): Считайте файл конфигурации в форме XML.
3. Вставьте информацию о записи (форматированную информацию журнала).
После выполнения двух вышеуказанных необходимых шагов вы можете легко использовать операторы журналирования с разными приоритетами для вставки в любое место, где вы хотите вести журнал. Синтаксис следующий:
Logger.debug(Объектное сообщение);
Logger.info(Объектное сообщение);
Logger.warn(Объектное сообщение);
Logger.error(Объектное сообщение);
Демонстрация программы
1. Используйте программу для вывода информации журнала.
импортировать java.io.IOException;
импортировать org.apache.commons.logging.impl.Log4JLogger;
импортировать org.apache.log4j.BasicConfigurator;
импортировать org.apache.log4j.FileAppender;
импортировать org.apache.log4j.Layout;
импортировать org.apache.log4j.Level;
импортировать org.apache.log4j.Logger;
импортировать org.apache.log4j.SimpleLayout;
/**
*
* @версия: 1.1
*
* @author: Су Руонян<a href="mailto:[email protected]">Отправить письмо</a>
*
* @since: 1.0 Время создания: 2013-1-1 15:19:42
*
* @function: вывод кода журнала
*
*/
общественный класс Log4jPrintByCode {
частный статический регистратор = Logger.getLogger(Log4jPrintByCode.class);
частный макет макета = новый SimpleLayout();
частный FileAppender fileAppender;
//Используем зависимости конструкции и инициализируем при создании объектов
public Log4jPrintByCode (макет макета, уровень уровня, строка distDir) {
BasicConfigurator.configure(); //Используем информацию о конфигурации по умолчанию, не нужно писать log4j.properties
пытаться {
init (макет, уровень, distDir);
} catch (Исключение е) {
е.printStackTrace();
}
}
public void init (макет макета, уровень уровня, строка distDir) выдает исключение {
logger.setLevel(level); //Устанавливаем уровень вывода журнала
fileAppender = новый FileAppender (макет, distDir, false);
logger.addAppender(fileAppender); //Добавляем выходной терминал;
}
public static void main(String[] args) {
Макет SimpleLayout = новый SimpleLayout();
Строка logDir = «log4jcode.Log»;
Log4jPrintByCode log4jCode = новый Log4jPrintByCode (макет, Level.INFO, logDir);
//Будет выведена следующая информация
log4jCode.logger.info("Информация журнала распечатывается с помощью log4j");
log4jCode.logger.warn("Журнал предупреждения распечатывается с помощью log4j");
log4jCode.logger.error("Ошибка журнала, распечатанная log4j");
}
общедоступный макет getLayout() {
обратная планировка;
}
public void setLayout (макет макета) {
this.layout = макет;
}
общественный FileAppender getFileAppender () {
вернуть файлAppender;
}
public void setFileAppender(FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// Запись информации уровня информации
если (logger.isInfoEnabled()) {
logger.info("Это информационное сообщение от Дао.");
}
2.Log4J выводит одну и ту же информацию журнала в несколько мест назначения.
/* Переключение базы данных */
используйте db_log4j;
/* Таблица информации журнала */
создать таблицу tb_log(
logId int не нуль auto_increment комментарий 'серийный номер',
createDate varchar(45) по умолчанию нулевой комментарий «Время создания журнала»,
поток varchar(45) по умолчанию нулевой комментарий 'текущая тема',
level varchar(45) по умолчанию нулевой комментарий «Текущий уровень журнала»,
class varchar(45) по умолчанию нулевой комментарий «Создать класс журнала»,
сообщение varchar(245) по умолчанию нулевой комментарий «Записывать конкретную информацию»,
первичный ключ (logId)
);
Экземпляр приложения выводит информацию журнала в консоль, файл и базу данных одновременно.
Создать базу данных и таблицы
/* Переключение базы данных */
используйте db_log4j;
/* Таблица информации журнала */
создать таблицу tb_log(
logId int не нуль auto_increment комментарий 'серийный номер',
createDate varchar(45) по умолчанию нулевой комментарий «Время создания журнала»,
поток varchar(45) по умолчанию нулевой комментарий 'текущая тема',
level varchar(45) по умолчанию нулевой комментарий «Текущий уровень журнала»,
класс varchar(45) по умолчанию нулевой комментарий «Создать класс журнала»,
сообщение varchar(245) по умолчанию нулевой комментарий «Записывать конкретную информацию»,
первичный ключ (logId)
);
#Определяем выход A1 на контроллер
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Определяем режим макета A1 как PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Определить выходной формат A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#Определяем вывод A2 в файл
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Определяем, в какой файл A2 выводится
log4j.appender.A2.File=./log/sysLog.log
#Определяем максимальную длину выходного файла A2
log4j.appender.A2.MaxFileSize = 1 КБ
#Определяем количество файлов резервных копий для A2
log4j.appender.A2.MaxBackupIndex = 3
#Определяем режим макета A2 как PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#Определяем режим вывода A2
log4j.appender.A2.layout.ConversionPattern=%d{гггг-ММ-дд чч:мм:сс}:%p %t %c - %m%n
#Определяем вывод формата A3 в базу данных
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=корень
log4j.appender.A3.password=корень
#Определяем макет A3 и выполняемые операторы SQL
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message)values('%d','%t','%-5p','%c','%m ')
импортировать org.apache.log4j.Logger;
импортировать org.apache.log4j.PropertyConfigurator;
/**
*
* @версия: 1.1
*
* @author: Су Руонян<a href="mailto:[email protected]">Отправить письмо</a>
*
* @since: 1.0 Время создания: 1 января 2013 г., 16:13:59
*
* @function: Управляйте выводом информации журнала в несколько мест назначения через файлы конфигурации.
*
*/
общественный класс Log4jPrintByConfigure {
частный статический регистратор = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main(String[] args) выдает исключение {
//Загружаем файл конфигурации журнала log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//Файл хранится в папке configure в том же каталоге, что и src.
//При размещении в src параметры должны быть «bin/log4j.properties» или «src/log4j.properties». В качестве стандарта рекомендуется использовать bin.
//Следующая информация будет распечатана
logger.debug("logger распечатывает сообщение DEBUG");
logger.info("регистратор распечатывает ИНФО-сообщение");
logger.warn("регистратор печатает ПРЕДУПРЕЖДАЮЩЕЕ сообщение");
logger.error("Сообщение об ошибке печати регистратора");
logger.fatal("Вот ФАТАЛЬНОЕ сообщение");
}
}