log4j2使用详解

本文主要介绍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遗留的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • log4j是一个被广泛使用的Java日志记录框架,通过使用该框架,我们可以在自己的项目中根据自身需求灵活配置日志输...
    LilacZiyun阅读 11,170评论 0 7
  • 这是在公司内部的一次升级实践,删除了很多隐私的内容,所以可能不是很完整。 1、背景 在任何系统中,日志都是非常重要...
    高广超阅读 13,530评论 2 35
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 10,479评论 1 13
  • 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析...
    时待吾阅读 10,434评论 0 6