Давайте научимся следить за выполнением логики в нашей программе, для этого мы научимся использовать логирование, поймем зачем оно и где используется.
Шаг 0. Обзор
Логирование – не используя термины википедии, то это возможность следить за процесом выполнения бизнес-логики проекта.
Зачем нужно логирование и что оно даёт?
Допустим у вас есть WEB-проект, и он что-то делает, сейчас не важно что именно. Допустим это интернет магазин, на котором при оформлении заказа нужно отправить на почту покупателю отчет о его покупке, но почтовый сервер вышел из строя, и программно письмо не отправилось.
Вы, как человек который администрирует магазин начнет разбераться в чем же проблема. Неопытный человек будет долго искать проблему, а опытный сразу полезет в логи сервера, но там все логи сервера и найти то что нужно вам сложно.
В этом случае решение следующее, выводить нужные вам логи в отдельный файл. Но как понять, какие из всех логов, которые сыпятся в общий лог сервера нужны вам? Для этого нужно реализовать свою систему логирования, где вы сможите указать какие логи куда выводить, или же настроить уровни логирования.
В данном уроке мы рассмотрим как сконфигурировать и начать использовать Log4j.
Шаг 1. Создаем проект и добавляем завимости
Запускаем всеми любимую Intellij IDEA и тыкаем New Project выбираем Maven Module и называем его :
Теперь в pom.xml жлбавим зависимость:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
Это все зависимости, которые надо было подключить.
Шаг 2. Создание примитивной логики для примера
Давайте создадим класс в котором была бы бизнес-логика, назовем его 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(); } }
В результате выполнения данного кода, мы получим следующее:
Заказ оформлен! Товар добавлен в корзину
Как видите пока ничего нового.
Шаг 3. Конфигурируем Log4j
Чтобы гибко управлять логированием стоит создать в resources/ файл log4j.properties:
Теперь в этот файл добавим пару строк конфигураций:
# Уровень логирования log4j.rootLogger=INFO, file # Апендер для работы с файлами log4j.appender.file=org.apache.log4j.RollingFileAppender # Путь где будет создаваться лог файл log4j.appender.file.File=C:\\TMP\\log_file.log # Указываем максимальный размер файла с логами log4j.appender.file.MaxFileSize=1MB # Конфигурируем шаблон вывода логов в файл log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Теперь давайте более детальней разберем строку формирования шаблона:
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Значения:
%d{yyyy-MM-dd HH:mm:ss} – выводит дату в формате 2014-01-14 23:55:57
%-5p – выводит уровень лога (ERROR, DEBUG, INFO …), цифра 5 означает что всегда использовать 5 символов остальное дополнится пробелами, а минус (-), то что позиционирование по левой стороне.
%c{1} – категория, в скобках указывается сколько уровней выдавать. Так как у нас 1 уровень то писаться будет только имя класса.
%L – номер строки в которой произошёл вызов записи в лог.
%m – сообщение, которое передали в лог.
%n – переход на новую строку.
Шаг 4. Добавляем примитивное логирование
Теперь в класс 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 со следующим содержимым:
2014-01-14 23:55:57 INFO OrderLogic:12 - Это информационное сообщение! 2014-01-14 23:55:57 ERROR OrderLogic:19 - Это сообщение ошибки
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
17 комментариев к статье "Учимся вести логирования с помощью Log4j"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Опечатка: Запскаем
Спасибо! Полезная информация для отладки.
Спасибо огромное! Долго мучился с логированием, но ваш материал очень сильно помог!
Еще одна опечатка :)
“Теперь в pom.xml жлбавим зависимость:”
М-да.. Действительно просто. Хотя и прикрутить свой лог – не такая уж и сложная задача.
Подскажите, пожалуйста, удобное приложение для просмотра логов log4j в реальном времени
Очень понятно разъяснили, спасибо огромное!
Не подскажите,пожа-та, а если у нас к примеру есть свой сайт интернет-магазина, как можно достать куки с идентификаторами,который наш сайт отправил на браузер покупателей?
Спасибо!
Как изменить расположение файла логирования уже во время работы программы?
СУПЕР!!!.Спасибо вам ;)
Спасибки
Спасибо! все просто и быстро!
везде, где читал про логирование, сказано, что строка логирования в вызываемом методе должна стоять раньше остальных
оно логично – вдруг ошибка, надо же понимать, зашли мы в метод или нет
Добрый день
Можно ли обойтись без Maven?
Что у вас с заголовками. Тайтл страницы с ужасными ошибками. Да и заголовок статьи с ошибкой – ведут логированиЕ, я не логированиЯ!
Thank you!