Рубрики
Без рубрики

Учебные пособия по Apache Log4j 2

– Учебники по Apache Log4j 2

Простой пример log4j 2 hello world.

Протестировано с

  • Log4j 2.11.2
  • Мавен 3
  • Java 8

1. Каталог проектов

2. Знаток

	
		org.apache.logging.log4j
		log4j-api
		2.11.2
	
		
	
		org.apache.logging.log4j
		log4j-core
		2.11.2
	


    4.0.0

    com.mkyong
    log4j2
    1.0

    
        UTF-8
        1.8
        2.11.2
        3.4.2
    

    

        
            org.apache.logging.log4j
            log4j-api
            ${log4j.version}
        

        
            org.apache.logging.log4j
            log4j-core
            ${log4j.version}
        

        
        
            com.lmax
            disruptor
            ${disruptor.version}
        

        

        
        
            com.sun.mail
            javax.mail
            1.6.2
        

    

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.8.0
                
                    ${java.version}
                    ${java.version}
                
            

            
                org.apache.maven.plugins
                maven-shade-plugin
                3.2.0
                
                    
                    
                        package
                        
                            shade
                        
                        
                            
                                
                                    com.mkyong.HelloWorld
                                
                            
                        
                    
                
            

        
    


3. log4j2.xml

3.1 Создайте log4j2.xml в пути к классу проекта.



    
        
            
        
    
    
        
            
        
        
            
        
    

Для другого формата

4. Привет Log4j 2

4.1 Прочитайте это API Log4j 2

package com.mkyong;

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

public class HelloWorld {

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

    public static void main(String[] args) {

        logger.debug("Hello from Log4j 2");

        // in old days, we need to check the log level to increase performance
        /*if (logger.isDebugEnabled()) {
            logger.debug("{}", getNumber());
        }*/

        // with Java 8, we can do this, no need to check the log level
        logger.debug("{}", () -> getNumber());

    }

    static int getNumber() {
        return 5;
    }

}

Выход

19:12:25.337 [main] DEBUG com.mkyong.HelloWorld - Hello from Log4j 2
19:12:25.340 [main] DEBUG com.mkyong.HelloWorld - 5

5. Log4j 2 Конфигурация

5.1 Мы можем изменить статус на “трассировка”, “отладка”, “информация”, “предупреждение”, “ошибка” и “фатальный”, чтобы включить внутренние события Log4j, он отобразит много полезных журналов для компонентов Log4j. Прочитайте это для Конфигурации Log4j


    

6. Log4j Лог4j 2 Приложения

Некоторые из распространенных приложений Log4j.

6.1 Приложение для консоли



    
        
            
        
    
    
		
        
            
        
        
            
        
    

6.2 Приложение для файлов



    
        
            
        
        
            
                %d %p %c{1.} [%t] %m%n
            
        
    
    
        
            
            
        
        
            
        
        
            
            
        
    

6.3 RollingFileAppender – Поворачивать файлы журналов ежедневно или при размере файла > 10 МБ.


    
        
            
        
        
			
				%d %p %c{1.} [%t] %m%n
			
			
				
				
			
		
    
	
    
        
        
            
        
        
            
        
    

По умолчанию он создаст до 7 архивов в один и тот же день.

Мы можем переопределить архивы по умолчанию 7 с помощью этой DefaultRolloverStrategy

	
		
			%d %p %c{1.} [%t] %m%n
		
		
			
			
		
		
	

6.4 Приложение RollingRandomAccessFileAppender – Похоже на RollingFileAppender , но быстрее.

	
		
			%d %p %c{1.} [%t] %m%n
		
		
			
			
		
		
	

6.5 AsyncAppender – Сделать приложение асинхронным. Увеличьте производительность.


    
        
            
        

        
            
                %d %p %c{1.} [%t] %m%n
            
            
                
                
            
            
        

        
			
            
        

    
    
        
        
            
        
        
            
        
    

6.6 SMTPAppender – Нужно javax.mail отправить электронное письмо.

	
		com.sun.mail
		javax.mail
		1.6.2
	


    
        
            
                %d %p %c{1.} [%t] %m%n
            
            
                
                
            
            
        

        
        

    
    
        
            
            
        
        
            
        
    

Имитировать ошибку

package com.mkyong;

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

public class HelloWorldError {

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

    public static void main(String[] args) {

        try {
            System.out.println(getData());
        } catch (IllegalArgumentException e) {
            logger.error("{}", e);
        }

    }

    static int getData() throws IllegalArgumentException {
        throw new IllegalArgumentException("Sorry IllegalArgumentException!");
    }

}

Образец электронного письма

7. Асинхронные регистраторы

7.1 Чтобы включить асинхронность всех регистраторов, нам нужно 2 вещи:

  • Разрушитель 3 присутствует в пути к классу проекта.
  • Установите системное свойство log4j2.contextselector=org.apache.ведение журнала.log4j.core.асинхронный. Асинклоггерконтекстселектор

7.2 Если мы попытаемся настроить 7.2 Если мы попытаемся настроить и разрушитель отсутствует в пути к классу, он выдаст следующее сообщение об ошибке:

$ mvn clean package

$ mvn -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -jar target\log4j2-1.0.jar

java.lang.NoClassDefFoundError: com/lmax/disruptor/EventTranslatorVararg
    at java.lang.ClassLoader.defineClass1 (Native Method)
    at java.lang.ClassLoader.defineClass (ClassLoader.java:1009)
    at java.security.SecureClassLoader.defineClass (SecureClassLoader.java:174)
    at java.net.URLClassLoader.defineClass (URLClassLoader.java:545)
    at java.net.URLClassLoader.access$100 (URLClassLoader.java:83)
    at java.net.URLClassLoader$1.run (URLClassLoader.java:453)

7.3 Чтобы исправить это, добавьте разрушитель

	
		com.lmax
		disruptor
		3.4.2
	

7.4 Запустите его снова, с конфигурацией Log4j 2 в состоянии debug .

Асинхронные регистраторы

$ java -Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector -jar target\log4j2-1.0.jar

2019-03-25 21:11:23,919 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09
2019-03-25 21:11:23,921 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=AsyncLoggerRingBuffer
2019-03-25 21:11:23,921 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=StatusLogger
2019-03-25 21:11:23,922 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=ContextSelector
2019-03-25 21:11:23,923 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Loggers,name=
2019-03-25 21:11:23,923 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Loggers,name=com.mkyong
2019-03-25 21:11:23,924 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Appenders,name=LogToConsole
2019-03-25 21:11:23,924 main DEBUG Registering MBean org.apache.logging.log4j2:type=AsyncContext@464bee09,component=Appenders,name=LogToRollingFile
//...
2019-03-25 21:11:24,020 pool-1-thread-1 DEBUG Stopped LoggerContext[name=AsyncContext@464bee09, org.apache.logging.log4j.core.async.AsyncLoggerContext@45fd9a4d] with 

Синхронные регистраторы

2019-03-25 21:12:49,432 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=StatusLogger
2019-03-25 21:12:49,433 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=ContextSelector
2019-03-25 21:12:49,433 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Loggers,name=
2019-03-25 21:12:49,434 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Loggers,name=com.mkyong
2019-03-25 21:12:49,435 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Appenders,name=LogToConsole
2019-03-25 21:12:49,435 main DEBUG Registering MBean org.apache.logging.log4j2:type=57baeedf,component=Appenders,name=LogToRollingFile
//...
2019-03-25 21:12:49,449 pool-1-thread-1 DEBUG Stopped LoggerContext[name=57baeedf, org.apache.logging.log4j.core.LoggerContext@4ed5eb72] with status true

8. Смешивание синхронных и Асинхронных регистраторов


    
        
            
        

        
            
                %d %p %c{1.} [%t] %m%n
            
            
                
                
            
            
        

    
    

        
        
            
            
        

        
        
            
        
    

Прочитайте это Асинхронные регистраторы для низкой задержки Регистрация

Скачать Исходный Код

Рекомендации

Оригинал: “https://mkyong.com/logging/apache-log4j-2-tutorials/”