springboot 日志管理之 log4j2

1、log4j2 简介

        Apache Log4j2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。被誉为是目前最优秀的Java日志框架。

2、项中引入 log4j2 的方式
2.1、springboot 项目中


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



 
   org.springframework.boot
   spring-boot-starter-log4j2
2.2、普通 java 项目中
    org.apache.logging.log4j
    log4j-api
    2.6.2


    org.apache.logging.log4j
    log4j-core
    2.6.2



    org.slf4j
    slf4j-api
    1.7.21


    org.apache.logging.log4j
    log4j-slf4j-impl
    2.6.2
3、在项目中指定 log4j2 的配置文件

        如果 log4j2 框架使用的是 springboot 默认的命名方式 log4j2-spring.xml ,则不需要配置,直接在项目的 resources 目录下创建 log4j2-spring.xml 文件即可;如果使用自定义命名的方式,需要在项目的配置文件中 application.yml 中添加以下配置。

logging:
  config: classpath:my_log4j2.xml
4、log4j2 配置文件详解
4.1、configuration 标签
status:记录到控制台的内部Log4j事件的级别。此属性的有效值为 trace, debug, info, warn, error, fatal”。

monitorInterval: 从文件配置后,Log4j能够自动检测对配置文件的更改并自行重新配置。以便仅在至少30秒之后检查配置文件的更改。默认为5秒。
4.2、Properties 标签

        Properties 标签定义全局属性,name属性必须存在且唯一,允许使用${name}来引用该变量。

    ../logs/xxx
4.3、Appenders 标签
4.3.1、日志输出到控制台(Console 标签)

有几个参数:

name:指定Appender的名字;

target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT;

PatternLayout:输出格式,不设置默认为:%m%n。




  

  

4.3.2、日志输出到文件(File 标签)

有以下几个参数:

name:指定Appender的名字;

fileName:指定输出日志的目的文件带全路径的文件名;

append:是否追加,默认为

PatternLayout:输出格式,不设置默认为:%m%n。

   

4.3.3、滚动日志输出到文件(RollingFile 标签)

有以下几个参数:

name:指定Appender的名字。

fileName:指定输出日志的目的文件带全路径的文件名。

PatternLayout:输出格式,不设置默认为:%m%n。

filePattern:指定新建日志文件的名称格式。

Policies:指定滚动日志的策略,就是什么时候进行新建日志文件输出日志。

   TimeBasedTriggeringPolicy:Policies 子节点,基于时间的滚动策略,interval 属性用来指定多久滚动一次,默认是 1 小时。modulate=true用来对备份日志的生成时间纠偏,纠偏以0为基准进行,”0+interval”决定启动后第一次备份时间;

   SizeBasedTriggeringPolicy:Policies 子节点,基于指定文件大小的滚动策略,size 属性用来定义每个日志文件的大小;

   DefaultRolloverStrategy:用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过 max 属性)。





   
       
   
       
       
       

       
       
       
       
    
    

    
    
        
        
        
            
            
            
            
            
            
        
    
4.4、loggers 节点

        常见的有两种:Root 和 Logger。

4.4.1、root 标签

        Root 节点用来指定项目的根日志,如果没有单独指定 Logger,那么就会默认使用该 Root 日志输出。

  level:日志输出级别;

  AppenderRef:Root 的子节点,用来指定该日志输出到哪个 Appender。

4.4.2、logger 标签

        Logger 节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

        level:日志输出级别;

        name:用来指定该 Logger 所适用的类或者类所在的包全路径,继承自Root节点;        

        AppenderRef:Logger 的子节点,用来指定该日志输出到哪个 Appender,如果没有指定,就会默认继承自 Root。如果指定了,那么会在指定的这个 Appender 和 Root 的 Appender 中都会输出,此时我们可以设置 Logger 的 additivity=”false” 只在自定义的 Appender 中进行输出。

4.5、Filter 标签

         允许在以下四个位置中指定过滤器:由全局到局部依次是 configuration,Logger ,Appender ,Appender Reference。注意:全局 Filter 标签 Filters 放在 properties 标签之后。

常用的 filter:

1)、CompositeFilter : 组合模式,用以向外界提供统一的访问接口。
2)、ThresholdFilter : 这个Filter负责按照所配置的日志级别过滤日志,等于或超出所配置级别的日志将返回onMatch结果。
3)、 LevelRangeFilter : 这个Filter也是负责按照日志级别过滤日志,只是相比较于ThresholdFilter,它比较的是指定区间范围。这里有一个需要密切注意就是其两个参数minLevel,maxLevel的配置;如果想要只保留WARN到ERROR级别的日志,那么应该如下配置:



4)、 DynamicThresholdFilter :这个Filter允许依据ThreadContext中是否存在特定的某些值,以及日志级别来过滤LOG。

 

   
   
   
   
  
    
      
      
      
        %d %p %c{1.} [%t] %m%n
      
      
    
      
  
     
    
      
        
        
      
    
    
       
      
        
          
        
      
    
  
4.6、指定使用的激活环境

        在某个 appender 上添加 SpringProfile 标签,设置使用当前 appender 的激活环境。

   
      
   
5、log4j2-spring.xml 文件



    
    
    
    
        
        
        
        
    

    
        
        
            
            <!---->
            
            
           
            
<!---->
        
       
        
        
            
            
            
            
            
            
                
                
                
                
                
            
       
            
        
        
            
            
            
            
            
            
                
                
                
                
                
            
     
            
        
    
    
    
    
        
        
            
        
        

        
            
        

        
            
            
            
        
    
6、日志配置信息的符号解释
-X号 # X信息输出时左对齐;
 %p # 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
 %d # 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
 %r # 输出自应用启动到输出该log信息耗费的毫秒数
 %c # 输出日志信息所属的类目,通常就是所在类的全名
 %t # 输出产生该日志事件的线程名
 %l # 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main (TestLog4.java:10)
 %x # 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
 %% # 输出一个"%"字符
 %F # 输出日志消息产生时所在的文件名称
 %L # 输出代码中的行号
 %m # 输出代码中指定的消息,产生的日志具体信息
 %n # 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
 1) %20c  # 指定输出全类名最小的宽度是20,如果全类名小于20的话,默认的情况下右对齐。
 2) %-20c # 指定输出全类名最小的宽度是20,如果全类名小于20的话,"-"号指定左对齐。
 3) %.30c # 指定输出全类名最小的宽度是30,如果全类名大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
 4) %20.30c # 如果全类名小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉

总结:log4j2 日志框架是基于 log4j 和 logback 的升级,是当前应用最为广泛的一种框架,以上详解足以完成开发需求,更加详细配置请参考:Log4j – Configuring Log4j 2。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

springboot 日志管理之 log4j2

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/c79af620ff.html