Введение в ведение журнала Java

Введение в ведение журнала Java

1. обзор

Ведение журнала - мощное средство для понимания и отладки поведения программы во время выполнения. Журналы собирают и сохраняют важные данные и делают их доступными для анализа в любой момент времени.

В этой статье рассматриваются наиболее популярные платформы ведения журналов Java, Log4j 2 и Logback, а также их предшественник Log4j, а также кратко рассматривается SLF4J, фасад ведения журналов, который обеспечивает общий интерфейс для различных сред ведения журналов.

2. Включение ведения журнала

Все каркасы ведения журналов, обсуждаемые в статье, разделяют понятия регистраторов, приложений и макетов. Включение регистрации внутри проекта состоит из трех общих шагов:

  1. Добавление необходимых библиотек

  2. конфигурация

  3. Размещение выписок из журнала

В следующих разделах обсуждаются шаги для каждой структуры в отдельности.

3. Log4j 2

Log4j 2 - это новая и улучшенная версия каркаса журналирования Log4j. Наиболее убедительным улучшением является возможность асинхронного ведения журнала. Log4j 2 требует следующих библиотек:


    org.apache.logging.log4j
    log4j-api
    2.6.1


    org.apache.logging.log4j
    log4j-core
    2.6.1

В последней версииlog4j-api вы можете найтиhere иlog4j-core -here.

3.1. конфигурация

Настройка Log4j 2 основана на основном файле конфигурацииlog4j.xml. Первое, что нужно настроить - это appender.

Они определяют, куда будет отправлено сообщение журнала. Назначением может быть консоль, файл, сокет и т. Д.

Log4j 2 имеет множество приложений для разных целей, дополнительную информацию вы можете найти на официальном сайтеLog4j 2.

Давайте посмотрим на простой пример конфигурации:


    
        
            
        
    

Вы можете установить имя для каждого приложения, например, используйте имяconsole вместоstdout.

Обратите внимание на элементPatternLayout - он определяет, как должно выглядеть сообщение. В нашем примере шаблон устанавливается на основе параметраpattern, где%d определяет шаблон даты,%p - вывод уровня журнала,%m - вывод зарегистрированного сообщения и %n - добавляет символ новой строки. Более подробную информацию о шаблоне вы можете найти на официальной страницеLog4j 2.

Наконец -to enable an appender (или несколько) вам нужно добавить в раздел<Root>:


    

3.2. Вход в файл

Иногда вам нужно будет использовать запись в файл, поэтому мы добавим логгерfout в нашу конфигурацию:


    
        
            %d{yyyy-MM-dd HH:mm:ss} %-5p %m%nw
        
    

У приложенияFile есть несколько настраиваемых параметров:

  • file - определяет имя файла журнала

  • append - значение по умолчанию для этого параметра истинно, что означает, что по умолчанию приложениеFile будет добавляться к существующему файлу, а не усекать его.

  • PatternLayout, что было описано в предыдущем примере.

Чтобы включить приложениеFile, вам необходимо добавить его в раздел<Root>:


    
    

3.3. Асинхронное ведение журнала

Если вы хотите сделать свой Log4j 2 асинхронным, вам необходимо добавить библиотеку LMAX Disruptor в вашpom.xml. LMAX disruptor является библиотекой межпотоковой связи без блокировки.

Добавление разрушителя в pom.xml:


    com.lmax
    disruptor
    3.3.4

Последнюю версию дизраптора можно найтиhere.

Если вы хотите использовать LMAX disruptor, вам нужно использовать<asyncRoot> вместо<Root> в вашей конфигурации.


    
    

Или вы можете включить асинхронное ведение журнала, установив для системного свойстваLog4jContextSelector значениеorg.apache.logging.log4j.core.async.AsyncLoggerContextSelector.

Вы, конечно, можете узнать больше о настройке асинхронного регистратора Log4j2 и увидеть некоторые диаграммы производительности наLog4j2 official page.

3.4. использование

Ниже приведен простой пример, демонстрирующий использование Log4j для ведения журнала:

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class Log4jExample {

    private static Logger logger = LogManager.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        logger.debug("Debug log message");
        logger.info("Info log message");
        logger.error("Error log message");
    }
}

После запуска приложение будет записывать следующие сообщения как в консоль, так и в файл с именемexample.log:

2016-06-16 17:02:13 INFO  Info log message
2016-06-16 17:02:13 ERROR Error log message

Если вы повысите уровень корневого журнала доERROR:

Вывод будет выглядеть следующим образом:

2016-06-16 17:02:13 ERROR Error log message

Как вы можете видеть, изменение уровня журнала на верхний параметр приводит к тому, что сообщения с более низким уровнем журнала не будут печататься для приложений.

Методlogger.error также можно использовать для регистрации возникшего исключения:

try {
    // Here some exception can be thrown
} catch (Exception e) {
    logger.error("Error log message", throwable);
}

3.5. Конфигурация на уровне пакета

Допустим, вам нужно отображать сообщения с уровнем журнала TRACE - например, из определенного пакета, такого какcom.example.log4j2:

logger.trace("Trace log message");

Для всех остальных пакетов вы хотите продолжать регистрировать только сообщения INFO.

Имейте в виду, что TRACE ниже, чем уровень INFO корневого журнала, который мы указали в конфигурации.

Чтобы включить ведение журнала только для одного из пакетов, вам нужно добавить следующий раздел перед<Root> в вашlog4j.xml:


    

Это включит ведение журнала для пакетаcom.example.log4j, и ваш результат будет выглядеть так:

2016-06-16 17:02:13 TRACE Trace log message
2016-06-16 17:02:13 DEBUG Debug log message
2016-06-16 17:02:13 INFO  Info log message
2016-06-16 17:02:13 ERROR Error log message

4. Logback

Logback - это улучшенная версия Log4j, разработанная тем же разработчиком, который создал Log4j.

Logback также имеет гораздо больше возможностей по сравнению с Log4j, причем многие из них также представлены в Log4j 2. Вот краткий обзор всех преимуществ Logback наofficial site.

Начнем с добавления следующей зависимости кpom.xml:


    ch.qos.logback
    logback-classic
    1.1.7

Эта зависимость транзитивно втянет еще две зависимости,logback-core иslf4j-api. Обратите внимание, что последнюю версию Logback можно найтиhere.

4.1. конфигурация

Давайте теперь посмотрим на пример конфигурации Logback:


  # Console appender
  
    
      # Pattern of log message for console appender
      %d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
    
  

  # File appender
  
    example.log
    false
    
      # Pattern of log message for file appender
      %d{yyyy-MM-dd HH:mm:ss} %-5p %m%n
    
  

  # Override log level for specified package
  

  
    
    
  

Logback использует SLF4J в качестве интерфейса, поэтому вам нужно импортировать SLF4J'sLogger иLoggerFactory.

4.2. SLF4J

SLF4J предоставляет общий интерфейс и абстракцию для большинства каркасов логирования Java. Он действует как фасад и предоставляет стандартизированный API для доступа к базовым функциям каркаса журналирования.

Logback использует SLF4J в качестве нативного API для своей функциональности. Ниже приведен пример использования Logback Logging:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Log4jExample {

    private static Logger logger = LoggerFactory.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        logger.debug("Debug log message");
        logger.info("Info log message");
        logger.error("Error log message");
    }
}

Вывод останется таким же, как в предыдущих примерах.

5. Log4J

Наконец, давайте взглянем на почтенный фреймворк логирования Log4j.

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

Многие детали конфигурации соответствуют тем, которые обсуждались в разделе Log4j 2.

5.1. конфигурация

Прежде всего вам нужно добавить в свои проекты библиотеку Log4jpom.xml:


    log4j
    log4j
    1.2.17

Here, вы сможете найти последнюю версию Log4j.

Давайте рассмотрим полный пример простой конфигурации Log4j только с одним консольным приложением:




    
    
        
            
        
    

    
        
        
    

<log4j:configuration debug=”false”> - это открытый тег всей конфигурации, имеющий одно свойство -debug. Он определяет, хотите ли вы добавить отладочную информацию Log4j в журналы.

5.2. использование

После того, как вы добавили библиотеку Log4j и конфигурацию, вы можете использовать logger в своем коде. Давайте посмотрим на простой пример:

import org.apache.log4j.Logger;

public class Log4jExample {
    private static Logger logger = Logger.getLogger(Log4jExample.class);

    public static void main(String[] args) {
        logger.debug("Debug log message");
        logger.info("Info log message");
        logger.error("Error log message");
    }
}

6. Заключение

В этой статье приведены очень простые примеры того, как вы можете использовать различные каркасы журналирования, такие как Log4j, Log4j2 и Logback. Он охватывает простые примеры конфигурации для всех упомянутых платформ.

Примеры, сопровождающие статью, можно найтиover on GitHub.

Related