log4j2的认知

目的

最近听说log4j2的性能很不错,所以来学习学习,最终集成到springboot中。花了一周的时间,对log4j2有了一定的理解。这边文章不是讲如何学习和配置log4j2,主要还是记录一些基础的认知。

学习log4j2(不是重点)

如果你要学习log4j2,那我推荐你看这些资料。
请点击以下的文章(自己看)
文章1
文章2
文章3
文章4

工作原理(重点)

这个其实是重点!其他一些配置,查查文档就可以了。
请起码能看懂这个log4j2.xml文件哈



  
    
      
    
  
  
    
    
    
      
    
    
    
  

问题1:日志是怎样输出的?
思考: 如果让你去设计一个日志框架,满足这样的需求:针对特定的类,做一些配置,就能打印设置的级别;对于其他的类,设置默认的打印级别。
log4j2是这样设计的,对于没有任何配置的类,我都用 Root 设置的级别 。而对于特定的类,例如这个类org.springframework.A.java 我这样配置

注意理解root和logger的关系?
root和logger是父子节点!!!root是父节点,logger是子节点!!!
对于com.hr.A.java这个类。没有找到任何有关的配置,会找到root的级别是debug,那么这个com.hr.A.java中输出debug级别以上的日志,日志输出到名字是Console的append中。
对于org.springframework.A.java这个类。只会找到名字为org.springframework的logger且级别是info,因为这个logger子节点没有输出到任何appender,所以在logger子节点是不会输出任何东西。但是logger子节点的日志会传递给父节点root,注意此时日志的级别还是info,不是debug.因为root节点输出到console的append中,所以会打印到控制台中。
其实就是一句话:如果没有配置,那么就会使用root的级别;如果有配置,就会使用配置的级别。
但是要注意输出的地方:子节点可以输出,父节点也可以输出。例如下面的配置



  
    
      
    
  
  
    
    
       
   
    
      
    
    
    
  

这段配置,对于org.springframework.A.java这个类的日志,子节点logger先输出到名为Console的appender中;接着日志传递到root节点,root也会输出到名为Console的appender中.所以会打印两边。那么如果不想打印两遍,第一种做法在子节点中不打印,即不用配置appender。第二种使用additivity="false",这个就代表,不传递给父节点,日志不传给父节点,就算父节点配置了appender也是不会输出日志的!

高阶用法(扩展内容)

尝试看看官方文档即可,我这边列举简单的用法。
请点击以下的文章(自己看)
自定义pattern参数
基础/时间&大小回滚/定期删除/日志脱敏

你可能感兴趣的:(log4j2的认知)