《Log4j 2 官方文档》多余性(Additivity)

    xiaoxiao2023-12-24  25

    如果我们希望输出com.foo.Bar的TRACE等级的日志,而不像影响其他日志的输出。简单的改变日志等级是不能达到我们想要的目的;但是修改也很简单,只要我们添加一个新的Logger定义就可以达到目标。

    <Logger name="com.foo.Bar" level="TRACE"/> <Root level="ERROR"> <AppenderRef ref="STDOUT"> </Root>

    这个配置达到了我们想要的目标,所有com.foo.Bar的日志都会被输出,而其他组件的日志仅仅会输出ERROR等级的日志。

    在上面的例子,所有com.foo.Bar的日志都会被输出到控制台。这是因为为com.foo.Bar 配置的Logger没有设定任何的Appender。

    请看如下的配置

    <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="com.foo.Bar" level="trace"> <AppenderRef ref="Console"/> </Logger> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>

    将会输出

    17:13:01.540 [main] TRACE com.foo.Bar - entry 17:13:01.540 [main] TRACE com.foo.Bar - entry 17:13:01.540 [main] ERROR com.foo.Bar - Did it again! 17:13:01.540 [main] TRACE com.foo.Bar - exit (false) 17:13:01.540 [main] TRACE com.foo.Bar - exit (false) 17:13:01.540 [main] ERROR MyApp - Didn't do it.

    注意com.foo.bar的TRACE日志被输出了两次。

    首先com.foo.Bar关联的Logger执行了一次,直接输出到控制台。接下来这个Logger的父节点,也就是Root Logger执行了另一次输出,这是因为日志在com.foo.Bar已经被输出,所以也会被父自动输出到控制台。这就是多余性,有的时候多余性的确是非常便捷的功能(前面的例子,我们增加了一个Logger,但是没有设置Appender,但是却正常工作了),有的时候却不是很方便,因此这个功能在Logger中是可以通过additivity的属性进行关闭的(设置成false)。

    译者注:

    首先Additivity的确不知道该翻译成什么更合适,感觉什么“附加性”“额外性”都不是很合适,最后觉得“多余性”更贴切些,如果有好的建议望指正。

    其次这个多余性的特点,个人认为主要是让我们使用Log4j2的时候不用为每一个Logger指定Appender方便配置;当然如果想单独指定Appender,Log4j2也是支持的。而且可以设置开关。

    <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="com.foo.Bar" level="trace" additivity="false"> <AppenderRef ref="Console"/> </Logger> <Root level="error"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>

    上面配置的输出(译者的输出):

    16:41:37.116 [main] TRACE com.foo.Bar - Enter 16:41:37.118 [main] ERROR com.foo.Bar - Did it again! 16:41:37.119 [main] TRACE com.foo.Bar - Exit with(false) 16:41:37.119 [main] ERROR com.foo.MyApp - Didn't do it.

    一旦一个日志输出到一个Logger,这个Logger的additivity设置为false,那么这个日志不会再继续向父Logger进行传递,忽略其他Logger的additivity的设置。

    原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Log4j 2 官方文档》多余性(Additivity)

    0 About  Latest Posts

    Tornadojava

    添加本文到我的收藏

    Related Posts:

    《Log4j 2 官方文档》Configuring Filters《Log4j 2 官方文档》翻译邀请《Log4j官方文档》 JSON配置《Log4j2官方文档》从Log4j 1.x迁移《Log4j2官方文档》自动加载配置《Spark 官方文档》在Amazon EC2上运行Spark《Spring Data 官方文档》7. 映射《Apache Zookeeper 官方文档》-3 快速指南:使用zookeeper来协调分布式应用《Spring Data 官方文档》Reference Documentation至5.2. Examples Repository《Spring Data 官方文档》4.6 定制Spring Data仓库实现《Apache Zookeeper 官方文档》管理分布式系统就像管理动物园一样《Spring Data 官方文档》5.6 保存, 更新, 以及删除数据行《Apache Velocity用户指南》官方文档《Spark 官方文档》在YARN上运行Spark《Spark 官方文档》监控和工具 转载自  并发编程网 - ifeve.com 相关资源:敏捷开发V1.0.pptx
    最新回复(0)