《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.bar
的TRACE
日志被输出了两次。
首先com.foo.Bar
关联的Logger
执行了一次,直接输出到控制台。接下来这个Logger
的父节点,也就是Root Logge
r执行了另一次输出,这是因为日志在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)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Storm-源码分析-Topology Submit-Task
mk-task, 比较简单, 因为task只是概念上的结构, 不象其他worker, executor都需要创建进程或线程 所以其核心其实就是mk-task-data, 1. 创建TopologyContext对象, 其实就是把之前的topology对象和worker-data混合到一起, 便于task在执行时可以取到需要的topology信息. 2. 创建task-object, spout-object或bolt-object, 封装相应的逻辑, 如nextTuple, execute 3. 生成tasks-fn, 名字起的不好,让人误解执行了task的功能, 其实就是做些emit之间的准备工作, 其中最重要的就是调用grouper去产生targets task, 当然还包含些metrics, hooks的调用. 说白了其实mk-tasks, 没做啥事 (defn mk-task [executor-data task-id] (let [task-data (mk-task-data executor-data task-id) ;;1 mk-task-data storm-co...
- 下一篇
Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – 《史蒂夫·乔布斯传》 』 运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+,ElasticSearch 2.3.2 本文提纲 一、ES 的使用场景 二、运行 springboot-elasticsearch 工程 三、springboot-elasticsearch 工程代码详解 一、ES 的使用场景 简单说,ElasticSearch(简称 ES)是搜索引擎,是结构化数据的分布式搜索引擎。在《Elasticsearch 和插件 elasticsearch-head 安装详解》 和 《Elasticsearch 默认配置 IK 及 Java AnalyzeRequestBuilder 使用》 我详细的介绍了如何安装,初步使用了 IK 分词器。这里,我主要讲下 SpringBoot 工程中如何使用 ElasticSearch。 ES 的使用场景大致分为两块 1. 全文检索。加上分词(IK 是其中一个...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境