美文网首页
log4j2使用详解

log4j2使用详解

作者: yuanjian | 来源:发表于2017-12-19 14:05 被阅读0次

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

    • log4j2 配置文件层级结构
    <configuration>
        <appenders>
        </appenders>
        <loggers>
        <loggers>
    </configuration>
    
    • 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使用详解

          本文链接:https://www.haomeiwen.com/subject/dvggjxtx.html