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

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 官方文檔》監控和工具
最後更新:2017-05-19 11:01:41