Учимся вести логирования с помощью Log4j

Давайте научимся следить за выполнением логики в нашей программе, для этого мы научимся использовать логирование, поймем зачем оно и где используется.

Шаг 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 - Это сообщение ошибки
Урок создан: 15 января 2014 | Просмотров: 38342 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 24 января 2014 в 17:39

    Аноним

    Опечатка: Запскаем

  • 08 сентября 2014 в 20:21

    Аноним

    Спасибо! Полезная информация для отладки.

  • 20 ноября 2014 в 20:09

    Александр

    Спасибо огромное! Долго мучился с логированием, но ваш материал очень сильно помог!

  • 29 января 2015 в 08:26

    Mihail

    Еще одна опечатка :)
    «Теперь в pom.xml жлбавим зависимость:»

  • 09 февраля 2015 в 14:11

    greenCMETAHA

    М-да.. Действительно просто. Хотя и прикрутить свой лог — не такая уж и сложная задача.

  • 04 марта 2015 в 07:03

    Иван

    Подскажите, пожалуйста, удобное приложение для просмотра логов log4j в реальном времени

  • 10 апреля 2015 в 11:24

    Аноним

    Очень понятно разъяснили, спасибо огромное!

  • 18 апреля 2015 в 15:52

    маша

    Не подскажите,пожа-та, а если у нас к примеру есть свой сайт интернет-магазина, как можно достать куки с идентификаторами,который наш сайт отправил на браузер покупателей?

  • 20 октября 2015 в 16:48

    Аноним

    Спасибо!

  • 20 марта 2016 в 14:41

    Алекс

    Как изменить расположение файла логирования уже во время работы программы?

  • 20 марта 2016 в 19:11

    Павел

    СУПЕР!!!.Спасибо вам ;)

  • 22 июля 2016 в 17:24

    Алексей

    Спасибки