Springboot整合log4j2日志全解

常用的日志框架

  • java.util.logging:是JDK在1.4版本中引入的Java原生日志框架
  • Log4j:Apache的一个开源项目,可以控制日志信息输送的目的地是控制台、文件、GUI组件等,可以控制每一条日志的输出格式,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。虽然已经停止维护了,但目前绝大部分企业都是用的log4j。
  • LogBack:是Log4j的一个改良版本
  • Log4j2:Log4j2已经不仅仅是Log4j的一个升级版本了,它从头到尾都被重写了

日志门面slf4j

上述介绍的是一些日志框架的实现,这里我们需要用日志门面来解决系统与日志实现框架的耦合性。SLF4J,即简单日志门面(Simple Logging Facade for Java),它不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志实现。



前面介绍的几种日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。

使用了slf4j后,对于应用程序来说,无论底层的日志框架如何变,应用程序不需要修改任意一行代码,就可以直接上线了。

为什么选用log4j2

在这列举一下一些网上其他博文中对它们的性能评测:


  • 可以看到在同步日志模式下, Logback的性能是最糟糕的.
  • log4j2的性能无论在同步日志模式还是异步日志模式下都是最佳的.


log4j2优越的性能其原因在于log4j2使用了LMAX,一个无锁的线程间通信库代替了,logback和log4j之前的队列. 并发性能大大提升。

整合步骤

1. 引入依赖

springboot默认是用logback的日志框架的,所以需要排除logback,不然会出现jar依赖冲突的报错。

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

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

2. 配置文件

  • 如果自定义了文件名,需要在application.yml中配置
logging:
  config: xxxx.xml
  level:
    cn.com.xxx: debug
  • 默认名log4j2-spring.xml,就省下了在application.yml中配置

3. 配置文件模版

log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做,可能这也是技术发展的一个必然性,因为properties文件的可阅读性真的是有点差。这里给出一个模版,供大家参考。





  

  
  
    
    
    
    
    
    
  

  

    
      
      
      
      
    

    
    
      
    

    
    
      
      
      
      
        
        
        
      
      
      
    

    
    
      
      
      
      
        
        
        
      
      
      
    

    
    
      
      
      
      
        
        
        
      
      
      
    

  

  
  
  

    
    
      
    
    
    
    
      
    

    
      
      
      
      
      
    
  


配置参数简介

1. 日志级别

机制:如果一条日志信息的级别大于等于配置文件的级别,就记录。

低 --> 高

  • trace:追踪,就是程序推进一下,可以写个trace输出
  • debug:调试,一般作为最低级别,trace基本不用。
  • info:输出重要的信息,使用较多
  • warn:警告,有些信息不是错误信息,但也要给程序员一些提示。
  • error:错误信息。用的也很多。
  • fatal:致命错误。

2. 输出源

  • CONSOLE(输出到控制台)
  • FILE(输出到文件)

3. 格式

  • SimpleLayout:以简单的形式显示
  • HTMLLayout:以HTML表格显示
  • PatternLayout:自定义形式显示

4. PatternLayout自定义日志布局

  • %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间,输出到毫秒的时间
  • %-5level : 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
  • %c : logger的名称(%logger)
  • %t : 输出当前线程名称
  • %p : 日志输出格式
  • %m : 日志内容,即 logger.info("message")
  • %n : 换行符
  • %C : Java类名(%F)
  • %L : 行号
  • %M : 方法名
  • %l : 输出语句所在的行数, 包括类名、方法名、文件名、行数
  • hostName : 本地机器名
  • hostAddress : 本地ip地址

简单使用

public class LogExampleOther {
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExampleOther.class);
  
  public static void main(String... args) {
    log.error("Something else is wrong here");
  }
}

使用lombok工具简化创建Logger类

使用lombok后下面的代码等效于上述的代码,这样会更方便的使用日志。

@Slf4j
public class LogExampleOther {
  
  public static void main(String... args) {
    log.error("Something else is wrong here");
  }
}

你可能感兴趣的:(Springboot整合log4j2日志全解)