【Log4j2】log4j-users-guide 官方文档阅读笔记

avatar
作者
筋斗云
阅读量:0

文章目录

前言

  • 原文
    Apache Log4j 官方文档 pdf
  • 需求
    1. 将指定包目录的日志打到指定文件中
    2. ERROR 日志单独打到指定文件中
  • 目标
    理解 log4j2 的架构,理解并编写配置文件,完成需求。

1. Log4j2 架构直观了解

public class MyTest { 	private static final Logger logger = LogManager.getLogger(); } 

代码使用层面直接拿的是 Logger,配置层面还需要关注 Appender

在这里插入图片描述

配置中的 Logger 会被以树状结构组织起来。
AppenderLogger 连接硬件及远程服务的桥梁。
AppenderLogger 设计层面是解耦的,使用层面需要显示关联起来。
EG:

<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN">      <Appenders>         <!-- 声明一个打印到控制台的 appender-->         <Console name="Console" target="SYSTEM_OUT">             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>         </Console>     </Appenders>      <Loggers>         <!-- 声明普通logger-->         <Logger name="com.foo.Bar" level="trace">             <AppenderRef ref="Console"/>         </Logger>                  <!-- 声明root节点 -->         <Root level="error">             <AppenderRef ref="Console"/>         </Root>     </Loggers> </Configuration> 

2. Logger 的树状结构及 additivity

在这里插入图片描述

  1. Logger 需要在配置文件里面定义
  2. 官方建议使用包名作为 Logger 的 name 属性
  3. Logger 存在继承父类属性的能力,一路递归到 root(如图,三个Logger都会遍历到)
  4. 如果需要打破这种默认行为使用, 需要 additivity="false"
<Loggers>     <Logger name="tech.foo" level="trace" additivity="false">         <AppenderRef ref="Console"/>     </Logger>          <Root level="info">         <AppenderRef ref="Console"/>     </Root> </Loggers> 

上面代码的作用:
在这里插入图片描述

3. Logger 的 Level 属性

官网给了一张表,描述以下的事实
在这里插入图片描述

4. Filter 的结构

官方文档描述了 Filter 可以用在很多地方,包括细粒度到 Appender 这层。
Filter 提供了可以细粒度操作日志打印的可能。
在这里插入图片描述

5. Filter 作用的规则

<!-- 需要 Filter 链的能力,必须用改标签包裹住 --> <Filters> 	<!-- 看源码,onMatch="NEUTRAL" onMismatch="DENY" 为 ThresholdFilter  的默认值--> 	<ThresholdFilter level="INFO" onMatch="NEUTRAL" onMismatch="DENY"/> 	<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> 
  • onMatch 和 onMismatch 的含义

    • onMatch 日志事件准确度高于或等于 声明的 level 时触发。比如 声明为INFO,事件为ERROR。此时触发
    • onMismatchonMatch 相反
  • 取值含义

    • ACCEPT 放行,其他过滤器不走了
    • DENY 拒绝并返回给调用者,其他过滤器不走了
    • NEUTRAL 当前过滤器不处理,交给下一个过滤器,如果已经到最后一个了,放行。

上文配置的含义

比 INFO 模糊的事件都拒绝,比如 DEBUG
比 ERROR 精确(或相等)的事件都拒绝,比如 FATAL
综上,只处理 INFO 事件

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!