Spring Boot 使用 Log4j2


Java 中比较常用的日志工具类,有 Log4j、SLF4j、Commons-logging(简称jcl)、Logback、Log4j2(Log4j 升级版)、Jdk Logging。

Spring Boot 默认使用 Logback,但相比较而言,Log4j2 在性能上面会更好。

Spring Boot(版本1.5.10.RELEASE)中使用 Log4j2 非常简单,添加如下依赖:



	org.springframework.boot
	spring-boot-starter
	
		
			org.springframework.boot
			spring-boot-starter-logging
		
	




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




  com.lmax
  disruptor
  3.3.6




  com.fasterxml.jackson.core
  jackson-core
  2.7.4


  com.fasterxml.jackson.core
  jackson-databind
  2.7.4

然后在src/main/resources中添加log4j2.xml配置文件(Spring Boot 还会识别log4j2.jsonlog4j2.yaml):

<?xml version="1.0" encoding="UTF-8"?>



    
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
        
        /var/log/spring-boot-log4j2
    
    
        
            
        
        
        
            
                ${LOG_PATTERN}
            
            
            
                
                
                
            
            
                
                
                
            
            
        
    
    
        
        

        
        

        
     
        
        
            
            
        
    

这边需要注意几个日志的级别:

  • Configuration status="OFF":这个status配置的是,Log4j2 组件本身日志级别,指的是如果 Log4j2 本身出错,打印出的日志级别配置。
  • Root level="ERROR":这个level配置的是,程序输入的日志级别,对应log.error("this is a error"),程序会打印高于或等于所设置级别的日志。
  • ThresholdFilter level="ERROR":这个level配置的是,输出到日志文件(或是其他)的日志日志级别,也就是在日志文件只输出ERROR级别的日志,其他无关信息不输出。

在程序中使用 Log4j2 打印日志信息:

@SpringBootApplication
public class Log4j2DemoApplication implements ApplicationRunner {
    private static final Logger logger = LogManager.getLogger(Log4j2DemoApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(Log4j2DemoApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        logger.debug("Debugging log");
        logger.info("Info log");
        logger.warn("Hey, This is a warning!");
        logger.error("Oops! We have an Error. OK");
        logger.fatal("Damn! Fatal error. Please fix me.");
    }
}

或者使用Lombok,可以更方便的使用 Log4j2,需要添加依赖:


  org.projectlombok
  lombok

使用代码:

import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Log4j2
@RestController
public class HelloController {

    @RequestMapping("/home")
    public String home() {

        log.error("Hi ! We have an Error. Hello World");

        return "Hello World ----spring-boot-log4j2";
    }
}

注意:如果 IDEA 报错(找不到log),IDEA 设置中添加 Lombok 插件,即可。

参考资料:

  • 日志工具现状调研
  • logback log4j log4j2 性能实测
  • How to use Log4j 2 with Spring Boot(推荐
  • Spring Boot + Log4j2 日志框架配置 (Maven)
  • 聊一聊log4j2配置文件log4j2.xml(配置详情
  • spring-boot日志log4j2配置

相关