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

Учимся вести логирования с помощью 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 - Это сообщение ошибки

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

149431
15/01/2014

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

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

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

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

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

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

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

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

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

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

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

  11. Спасибо! все просто и быстро!

  12. везде, где читал про логирование, сказано, что строка логирования в вызываемом методе должна стоять раньше остальных
    оно логично – вдруг ошибка, надо же понимать, зашли мы в метод или нет

  13. Добрый день
    Можно ли обойтись без Maven?

  14. Что у вас с заголовками. Тайтл страницы с ужасными ошибками. Да и заголовок статьи с ошибкой – ведут логированиЕ, я не логированиЯ!

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

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)