springboot整合篇-springboot整合log4j2

log4j2简介

log4j2设计之初是为了审计,log4j2是log4j 1.x 的升级版,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。

  • log4j2相比log4j和logback有很大的性能替身。
  • log4j2能够自动重载配置,log4j2通过参数配置,可以不用重启应用而自动重新加载log4j2的配置文件。
  • log4j2能够避免死锁。

Log4j2与其他框架比较

异步日志比较

同步日志比较

明显可以看出,与各个日志框架对比而言,无论在同步或者异步情况下,log4j2表现更加优异,而其他日志就显得差强人意了。

Springboot集成Log4j2

本文仅采用同步日志写法,异步日志暂不赘述。实际线上情况可能仅会打印info级别的日志,而info级别的日志会包括info-log、warn-log、error-log、fatal-log。

pom依赖


        
            org.springframework.boot
            spring-boot-starter-web
            
            
                
                    spring-boot-starter-logging
                    org.springframework.boot
                
                
                    log4j
                    *
                
                
                    org.slf4j
                    *
                
                
                    org.apache.logging.log4j
                    *
                
            
        

        
        
            org.springframework.boot
            spring-boot-starter-log4j2
        

application.properties配置

logging.config=classpath:log4j2-spring.xml

log4j2-spring.xml文件配置






    
    
        ./WebAppLogs/logs
    
    
    
        
        
        
        
        
        
            
            
            
            
        
        
        
        
            
            
            
                
                
            
            
            
                
                
                    
                    
                    
                    
                
            
        

        
            
            
            
                
                
            
            
                
                    
                    
                
            
        

        
        
            
            
            
            
                
                
            
            
                
                    
                    
                
            
        

        
        
            
            
            
                
                
            
            
                
                    
                    
                
            
        

        
        
            
            
            
                
                
            
            
                
                    
                    
                
            
        
    
    
    
        
        
        
        
            
            
            
            
            
            
        
    

仅info-log的log4j2-spring.xml的配置文件






    
    
        ./WebAppLogs/logs
    
    
    
        
        
            
            
            
            
        
        
        
        
            
            
            
            
                
                
            
            
                
                    
                    
                
            
        
    
    
    
        
        
        
        
            
            
        
    

日志实现-slf4j(LogFactory)

public class LogUtil {

    /**
     * debug级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void debug(Class clazz, String msg, Object... params) {
        Logger logger = LoggerFactory.getLogger(clazz.getName());
        logger.debug(msg, params);
    }

    /**
     * trace日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void trace(Class clazz, String msg, Object... params) {
        Logger logger = LoggerFactory.getLogger(clazz.getName());
        logger.trace(msg, params);
    }

    /**
     * info级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void info(Class clazz, String msg, Object... params) {
        Logger logger = LoggerFactory.getLogger(clazz.getName());
        logger.info(msg, params);
    }

    /**
     * warn级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void warn(Class clazz, String msg, Object... params) {
        Logger logger = LoggerFactory.getLogger(clazz);
        logger.warn(msg, params);
    }

    /**
     * error级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void error(Class clazz, String msg, Object... params) {
        Logger logger = LoggerFactory.getLogger(clazz);
        logger.error(msg, params);
    }
}

日志实现Log4j(LogManager)

public class LogUtilManager {
    /**
     * debug级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void debug(Class clazz, String msg, Object... params) {
        Logger logger = LogManager.getLogger(clazz.getName());
        logger.debug(msg, params);
    }

    /**
     * trace级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void trace(Class clazz, String msg, Object... params) {
        Logger logger = LogManager.getLogger(clazz.getName());
        logger.trace(msg, params);
    }

    /**
     * info级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void info(Class clazz, String msg, Object... params) {
        Logger logger = LogManager.getLogger(clazz.getName());
        logger.info(msg, params);
    }

    /**
     * warn级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void warn(Class clazz, String msg, Object... params) {
        Logger logger = LogManager.getLogger(clazz);
        logger.warn(msg, params);
    }

    /**
     * error级别日志输出
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void error(Class clazz, String msg, Object... params) {
        Logger logger = LogManager.getLogger(clazz);
        logger.error(msg, params);
    }

    /**
     * fatal日志
     * @param clazz 类
     * @param msg 日志
     * @param params 其他参数
     */
    public static void fatal(Class clazz, String msg, Object... params) {
        Logger logger = LogManager.getLogger(clazz);
        logger.fatal(msg, params);
    }
}

两种实现的调用

void testLog() {
    LogUtil.info(ConfigApplicationTests.class, "this is logfactory info log");
    LogUtilManager.info(ConfigApplicationTests.class, "this is logmanager info log");
}

日志输出

总结

本文总结了springboot集成log4j2,当然实际业务情况也有才有logback+slf4j等方式来实现,log4j2在各个方面都表现优异。

参考文章

你可能感兴趣的:(java,springboot,log4j2)