log4j2使用详解

本文主要介绍log4j2的使用,分别从log4j2的层级结构、log4j2的配置-详解appender属性配置、log4j2 filter分析-含源码分析、异步日志打印等方面进行讲述。

  • log4j2 配置文件层级结构

    
    
    
    

  • configuration
    configuration可以带有两个参数 status,monitorInterval。status设置日志的级别,用于log4j2内部的日志输出。monitorInterval,log4j2能够自动检测配置变化,可以设置一个单位为秒的时间,表示每个多少秒,log4j2会重新加载配置文件

  • apperders
    appenders可以中可以定义多个appender,每一个appender表示一份日志的输出形式,常用的有console、file、RollingFile、RandomAccessFile、RollingRandomAccessFile。
      console:表示输出到控制台;
      file表示输出到一个文件;
      RollingFile表示可备份历史日志,可设置根据时间或者文件大小备份;
      RandomAccessFile

  • 下面三张图主要讲解filter的调用过程:

    图1

      上图中只有当isFilteredByAppender(event)的值返回false时才会调用函数tryCallAppender(event)打印日志
    图2

      图2中只有当filter不为null且filter.filter(event)的值为DENY时返回值才会为true。

图3

  图3中filters表示当前appender中具体的filter数组。这段代码可以得出一个结论,只要Result filter(final LogEvent event)函数返回“ACCEPT”或者“DENY”便结束循环。

图4

  上图中filter(event.getLevel())参数是当前打印的日志级别,logger.error()打印的级别就是error。但是private Result filter(final Level level)函数返回的是onMatch的值还是onMismatch的值,要解决这个问题,还需要看后面的代码。

图5

图6

  图5、图6两张图判断当前打印日志的level(L1)的值和当前filter的level值(L2),如果L1>L2(Err>War>info>Deb,对应的值正好相反),则取filter的OnMatch值否则取OnMismatch的值。可以看出filter的匹配规则:当打印的日志级别比当前filter设置的级别高即为匹配上,解决图4遗留的问题。

你可能感兴趣的:(log4j2使用详解)