1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
Скрыть объявление

Привет посетитель! У нас на форуме тебе откроются дополнительные разделы, которые скрыты от гостей! А так же ты найдёшь много полезной информации.

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

Тема в разделе "Java / Scala", создана пользователем Ancient, 25 сен 2015.

  1. Ancient

    Ancient L2JOrigon Пользователь

    Регистрация:
    20 сен 2015
    Сообщения:
    478
    Симпатии:
    69
    Баллы:
    163
    Обратите внимание, если Вы хотите провести сделку с данным пользователем, на то, что он заблокирован.
    Теперь в pom.xml добавим зависимость:
    Код:
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    Это все зависимости, которые надо было подключить.
    Давайте создадим класс в котором была бы бизнес-логика, назовем его 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.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} — выводит дату в формате 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 - Это сообщение ошибки
     
  2. Daan Raven

    Daan Raven Свой человек Проверенный

    Регистрация:
    7 апр 2015
    Сообщения:
    708
    Симпатии:
    323
    Баллы:
    469
    Уже log4j2 давным-давно есть. И конфигурация большого кол-ва логгеров хранится в xml. В инете статей, как прикрутить первый log4j уйма.
     
    JunkyFunky и kick нравится это.
  3. Influence

    Influence Бывалый Проверенный

    Регистрация:
    14 июн 2015
    Сообщения:
    860
    Симпатии:
    417
    Баллы:
    565
    хватит чужое копипастить и займись уже своей сборкой, а не херней
     
    kick нравится это.
  4. kick

    kick Магистр Йода Администратор

    Регистрация:
    20 янв 2015
    Сообщения:
    4.918
    Симпатии:
    3.478
    Баллы:
    6.235
    Наверное надо взять кинуть доку с апача и всё
     
  5. Daan Raven

    Daan Raven Свой человек Проверенный

    Регистрация:
    7 апр 2015
    Сообщения:
    708
    Симпатии:
    323
    Баллы:
    469
    В логбэке вроде аналогичная конфигурация с log4j.
     
  6. Daan Raven

    Daan Raven Свой человек Проверенный

    Регистрация:
    7 апр 2015
    Сообщения:
    708
    Симпатии:
    323
    Баллы:
    469
    Ну никто же не спорит. :-)
    Кстати, раз уж пошел разговор о логгерах, в чем плюс slf4j по сравнению с log4j? Не могу понять, зачем морочат голову и юзают его (ну кроме тех случаев, когда исходник определенной нужной библиотеки не доступен и в нем используется логгирование slf4j как какое-то абстрактное логгирование).
     
  7. WoWan-SM

    WoWan-SM Знающий Местный

    Регистрация:
    15 сен 2015
    Сообщения:
    105
    Симпатии:
    281
    Баллы:
    361
    Java logging. Hello World
     
    Daan Raven, Denwer и Mangol нравится это.