阅读149 返回首页    go 阿里云 go 技术社区[云栖]


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

如果我们希望输出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.barTRACE日志被输出了两次。

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

译者注:

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

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

<?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,这个Loggeradditivity设置为false,那么这个日志不会再继续向父Logger进行传递,忽略其他Loggeradditivity的设置。

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

WechatIMG1.jpeg

0
Favorite添加本文到我的收藏

Related Posts:

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

最后更新:2017-05-19 11:01:41

  上一篇:go  《Log4j 2 官方文档》Configuring Filters
  下一篇:go  小规模的流处理框架.Part 1: thread pools