《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)

0

Tornadojava

添加本文到我的收藏

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

时间: 2024-08-03 05:08:24

《Log4j 2 官方文档》多余性(Additivity)的相关文章

《Log4j 2 官方文档》Scripts

Log4j支持符合JSR223的脚本语言使用在它的组件上.任何一种支持符合JSR223标准的语言引擎都可以使用.所有的语言列表可以在JSR223脚本引擎的页面中找到.很多语言被列在这里,例如javaScript,Groovy,BeanShell,直接支持JSR223语言框架,只要引入了jar就可以支持选择的语言了.Log4j通过<script>,<scriptFile>和<scriptRef>这三个元素标签来支持脚本语言的使用.Script元素包含了脚本的名称,脚本编写

《Log4j 2官方文档》 Configuration Syntax

配置语法 正如之前的例子所展示的一样,Log4j允许你简单地重新定义记录日志的行为而不需要去修改你的应用.可以禁用应用程序的某些部分的日志记录,只在满足特定标准时记录日志,例如为特定用户执行的操作,路由输出到Flume或者日志系统.要想实现这些东西必须先理解这个配置文件的语法. 配置在xml里面的元素接受这几个属性: 元素名称和描述 advertiser (可选)用于通知单个FileAppender或SocketAppender配置的插件名称.唯一提供的Adverti ser插件是"multic

《Log4j 2 官方文档》Configuring Filters

配置过滤器 Log4j允许在下面4个地方中任意一个指定过滤器: 与追加器,记录器和属性元素处于同一级别. 这些过滤器可以在事件传递到LoggerConfig之前接受或拒绝事件. 在记录器元素中. 这些过滤器可以接受或拒绝特定记录器的事件. 在一个appender元素. 这些过滤器可以防止或导致事件由追加器处理. 在追加器引用元素中. 这些过滤器用于确定记录器是否应将事件路由到追加器. 虽然只能配置单个 filter元素,但该元素可以是代表CompositeFilter的 filters元素. f

《Log4j 2 官方文档》Testing in Maven

在 Maven 中使用测试 Maven在整个构建生命周期内可以运行单元测试和功能测试.默认情况下, 任何在 src/test/resources 路径下的文件都会复制到 target/test-classes 路径中, 同时这些文件在执行测试过程中,也会被包含在 classpath 中. 正因为这样的特性,如果将一个 log4j2-test.xml 文件放到 src/test/resources 目录中, 这会替换掉当前正在使用的 log4j2.xml 或 log4j2.json 配置.因此,

《Apache Velocity用户指南》官方文档

Quick Start 本项目是 Apache Velocity官方文档的中文翻译版,Velocity类似与JSP,是一种基于Java的模板引擎.它可以在web页面中引用Java代码中定义的数据和对象,而Velocity的作用就是把Web视图和java代码进行组装在一起.本次翻译主要针对对Velocity感兴趣和工作中使用到Velocity的开发人员提供有价值的中文资料,希望能够对大家的工作和学习有所帮助. 由于我也是第一次接触Velocity,还不是很深入,翻译的时候也查看了一些博客以及其他网

【Docker官方文档】理解Docker

本文讲的是[Docker官方文档]理解Docker,[编者的话]本文来自Docker的官方文档,详细介绍了Docker的体系结构.重要概念.内部工作机理等内容,推荐不了解Docker内部原理的同学阅读. 什么是Docker? Docker是一个用于开发.交付和运行应用的开放平台,Docker设计用来更快的交付你的应用程序.Docker可以将你的应用程序和基础设施层隔离,并且还可以将你的基础设施当作程序一样进行管理.Docker可以帮助你更块地打包你代码.测试以及部署,并且也可以减少从编写代码到部

Docker安全性——官方文档[译]

Docker安全性--官方文档[译] 本文译自Docker官方文档:https://docs.docker.com/articles/security/ 在审查Docker的安全时,需要考虑三个主要方面:◦容器内在的安全性,由内核命名空间和cgroup中实现;◦docker守护程序本身的攻击面;◦加固内核安全特性,以及它们如何与容器中互动. 内核 命名空间 Kernel Namespace Docker容器中非常相似LXC容器,并且它们都具有类似的安全功能.当您以"docker run"

jQuery 1.4官方文档详细讲述新特性功能

为了庆祝jQuery的四周岁生日, jQuery的团队荣幸的发布了jQuery Javascript库的最新主要版本! 这个版本包含了大量的编程,测试,和记录文档的工作,我们为此感到很骄傲. 我要以个人的名义感谢 Brandon Aaron, Ben Alman, Louis-Rémi Babe, Ariel Flesler, Paul Irish, Robert Kati?, Yehuda Katz, Dave Methvin, Justin Meyer, Karl Swedberg, and

TestNG官方文档中文版(9)-重复失败测试,junit测试,jdk1.4支持

5.10 - Rerunning failed tests 套件中的测试失败时,每次testNG都会在输出目录中创建一个名为testng-failed.xml 的文件.这个xml文件包含只重新运行这些失败的测试方法的必要信息,容许只运行这些 失败的测试而不必运行全部测试.因此,一种典型的情况将是这样: java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xml java -classpat