Java日志系统log4j2的使用配置和异步日志使用

目录

  • 1. log4j2
    • 1.1 log4j2介绍
    • 1.2 Log4j2入门
      • 1.2.1 log4j2(日志门面 + 日志框架)使用
      • 1.2.2 slf4j + log4j2使用
    • 1.3 Log4j2配置
    • 1.4 Log4j2异步日志
      • 1.4.1 全局异步AsyncLogger
      • 1.4.2 混合异步AsyncLogger
      • 1.4.3 AsyncAppender

1. log4j2

1.1 log4j2介绍

Apache Log4j2是Log4j的升级版,参考了logback一些优秀的设计,并且修复了logback的一些问题,而且性能上也有了重大提升,主要有:

  • log4j2对Appender提供了一些异常处理机制
  • 参考了logback的设计,提供自动刷新参数配置,可以自动重载配置而不用重启应用
  • log4j2利用缓冲区和重用对象,几乎不会产生临时对象,从而实现无垃圾机制

1.2 Log4j2入门

虽然Log4j2既是日志门面,也是日志框架。但还是推荐使用流行的日志门面slf4j + 功能强大且性能优越的日志框架log4j2

1.2.1 log4j2(日志门面 + 日志框架)使用

在pom.xml添加依赖

        
        
            org.apache.logging.log4j
            log4j-api
            2.18.0
        

        
        
            org.apache.logging.log4j
            log4j-core
            2.18.0
        

程序如下:

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


public class Log4j2Test {
    public static final Logger LOGGER = LogManager.getLogger(Log4j2Test.class);

    public static void main(String[] args) {

        // 默认只打印error及以上级别的日志
        LOGGER.fatal("fatal");
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug");
        LOGGER.trace("trace");

    }
}

运行程序,结果如下:

17:51:14.737 [main] FATAL Log4j2Test - fatal
17:51:14.744 [main] ERROR Log4j2Test - error

默认只打印error及以上级别的日志。后面可以通过log4j2.xml日志配置文件进行日志级别和日志输出格式的配置

1.2.2 slf4j + log4j2使用

在pom.xml添加依赖

        
        
            org.apache.logging.log4j
            log4j-api
            2.18.0
        

        
        
            org.apache.logging.log4j
            log4j-core
            2.18.0
        

        
        
            org.slf4j
            slf4j-api
            1.7.36
        

        
        
        
            org.apache.logging.log4j
            log4j-slf4j-impl
            2.18.0
        

程序如下:

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


public class Log4j2Test {

    public final static Logger LOGGER = LoggerFactory.getLogger(Log4j2Test.class);

    public static void main(String[] args) {

        // 默认只打印error级别的日志
        LOGGER.error("error");
        LOGGER.warn("warn");
        LOGGER.info("info");
        LOGGER.debug("debug");
        LOGGER.trace("trace");

    }
}

运行程序,结果如下:

18:07:44.628 [main] ERROR Log4j2Test - error

默认只打印error级别的日志。后面可以通过log4j2.xml日志配置文件进行日志级别和日志输出格式的配置

1.3 Log4j2配置

在classpath,比如resources目录下,新建log4j2.xml日志配置文件。内容如下:






    
    
        C:/Users/dell/Desktop/java11Test/logs
    

    
    
        
        
            
            
        

        
        
            
        

        
        
            
        

        
        
        
            
            
            
            
            
                
                
                
                
                
                
            
            
            
        
    

    
        
        
            
            
        
    

1.4 Log4j2异步日志

同步日志处理流程图如下:

Java日志系统log4j2的使用配置和异步日志使用_第1张图片异步日志处理流程图如下:

Java日志系统log4j2的使用配置和异步日志使用_第2张图片log4j2的异步日志带来了很大的性能提升。为了实现异步日志需要在pom.xml添加如下依赖:

        
        
        
            com.lmax
            disruptor
            3.4.4
        

提供了两种异步日志实现方法,一个是AsyncLogger(对应Logger组件,推荐使用),一个是AsyncAppender(对应Appender组件)

log4j2的全局异步AsyncLogger性能最好,第二个是混合异步AsyncLogger,性能最差的是AsyncAppender(和同步日志相比没有什么性能提升。和logback性能一样)

如果使用异步日志,全局异步AsyncLogger、混合异步AsyncLogger、AsyncAppender,不要同时使用。否则会使用性能较低的一种异步方式

1.4.1 全局异步AsyncLogger

所有appender的所有日志级别的日志都异步的记录,不需要改动log4j2.xml配置文件。只需要在classpath,比如resources目录下,新建log4j2.component.properties配置文件。内容如下:

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

1.4.2 混合异步AsyncLogger

可以同时使用同步日志和异步日志,这使得日志的配置方式更加灵活

log4j2.xml配置如下:




    
        C:/Users/dell/Desktop/java11Test/logs
    

    
        
            
        
    

    
        
        
        
        
        
            
        

        
        
            
        
    

输出如下:

2022-07-10 15:55:23.037 [main] [ERROR]  --- error
2022-07-10 15:55:23.039 [main] [WARN ]  --- warn

可以看到打印了WARN级别的日志,且没有打印日志执行的位置信息

1.4.3 AsyncAppender

log4j2.xml配置如下:




    
        C:/Users/dell/Desktop/java11Test/logs
    

    
        
            
        

        
        
            
        
    

    
        
            
            
        
    

你可能感兴趣的:(Java,log4j2,log4j,日志系统,Java,异步日志)