PDA

Просмотр полной версии : логирования с помощью Log4j


ancient
26.09.2015, 00:00
Теперь в pom.xml добавим зависимость:

Код:




log4j
log4j
1.2.17

Это все зависимости, которые надо было подключить.


Давайте создадим класс в котором была бы бизнес-логика, назовем его OrderLogic:

Код:



package com.devcolibri.logpack;
public class OrderLogic {
public void doOrder(){
// какае-то логика
System.out.println("Запускается");
addToCart();
}
private void addToCart() {
// добавление товара в корзину
System.out.println("Запущен!");
}
}


Хочу обратить ваше внимание на то, что логика данного проекта не важна, так как мы рассматриваем логирование, для этого я и подготовил примитивную логику класса OrderLogic.

И теперь создаем Main класс:

Код:



package com.devcolibri.logpack;
public class Main {
private static OrderLogic logic;
public static void main(String[] args) {
logic = new OrderLogic();
logic.doOrder();
}
}


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

Код:



Запускается
Запущен!


Чтобы гибко управлять логированием стоит создать в resources/файл log4j.properties:

Теперь в этот файл добавим пару строк конфигураций:

Код:



# Уровень логирования
log4j.rootLogger=INFO, file
# Апендер для работы с файлами
log4j.appender.file=org.apache.log4j.RollingFileAp pender
# Путь где будет создаваться лог файл
log4j.appender.file.File=C:\\TMP\\log_file.log
# Указываем максимальный размер файла с логами
log4j.appender.file.MaxFileSize=1MB
# Конфигурируем шаблон вывода логов в файл
log4j.appender.file.layout=org.apache.log4j.Patter nLayout
log4j.appender.file.layout.ConversionPattern=%d{yy yy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


Теперь давайте более детальней разберем строку формирования шаблона:

Код:



log4j.appender.file.layout.ConversionPattern=%d{yy yy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


Значения:

%d{yyyy-MM-dd HH:mm:ss} — выводит дату в формате 2015-09-15 22:55:57

%-5p — выводит уровень лога (ERROR, DEBUG, INFO …), цифра 5 означает что всегда использовать 5 символов остальное дополнится пробелами, а минус (-), то что позиционирование по левой стороне.

%c{1} — категория, в скобках указывается сколько уровней выдавать. Так как у нас 1 уровень то писаться будет только имя класса.

%L — номер строки в которой произошёл вызов записи в лог.

%m — сообщение, которое передали в лог.

%n — переход на новую строку.

Теперь в класс OrderLogic добавим логирование и посмотрим на результат:

Код:



package com.devcolibri.logpack;
import org.apache.log4j.Logger;
public class OrderLogic {
// Инициализация логера
private static final Logger log = Logger.getLogger(OrderLogic.class);
public void doOrder(){
// какае-то логика
System.out.println("Заказ оформлен!");
// логируем инфо
log.info("Это информационное сообщение!");
addToCart();
}
private void addToCart() {
// добавление товара в корзину
System.out.println("Товар добавлен в корзину");
// логируем ошибку
log.error("Это сообщение ошибки");
}
}


Теперь давайте запустим код опять. Мы получим тот же результат, вот только уже по пути C://TMP/ будет лежать файлlog_file.logсо следующим содержимым:

Код:



2015-09-15 23:00:57 INFO OrderLogic:12 - Это информационное сообщение!
2015-09-15 23:00:57 ERROR OrderLogic:19 - Это сообщение ошибки

Mizuwokiru
26.09.2015, 00:05
Уже log4j2 давным-давно есть. И конфигурация большого кол-ва логгеров хранится в xml. В инете статей, как прикрутить первый log4j уйма.

Influence
26.09.2015, 00:06
хватит чужое копипастить и займись уже своей сборкой, а не херней

mAnGoL
26.09.2015, 00:19
Что за хрень? log4j везде натыкан. Написал бы свою стать по logback, log4j2

kick
26.09.2015, 00:32
Наверное надо взять кинуть доку с апача и всё

Mizuwokiru
26.09.2015, 01:11
Что за хрень? log4j везде натыкан. Написал бы свою стать по logback, log4j2


В логбэке вроде аналогичная конфигурация с log4j.

mAnGoL
26.09.2015, 01:13
В логбэке вроде аналогичная конфигурация с log4j.


log4j2 лучше)

Mizuwokiru
26.09.2015, 01:26
log4j2 лучше)


Ну никто же не спорит.

Кстати, раз уж пошел разговор о логгерах, в чем плюс slf4j по сравнению с log4j? Не могу понять, зачем морочат голову и юзают его (ну кроме тех случаев, когда исходник определенной нужной библиотеки не доступен и в нем используется логгирование slf4j как какое-то абстрактное логгирование).

WoWan-SM
26.09.2015, 02:06
Ну никто же не спорит.
Кстати, раз уж пошел разговор о логгерах, в чем плюс slf4j по сравнению с log4j? Не могу понять, зачем морочат голову и юзают его (ну кроме тех случаев, когда исходник определенной нужной библиотеки не доступен и в нем используется логгирование slf4j как какое-то абстрактное логгирование).


Java logging. Hello World (http://habrahabr.ru/post/247647/)