閱讀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