2013-05-29 22 views
62

我第一次聽到關於標記閱讀:Java Logging框架中的標記是什麼以及使用它們的原因是什麼?

http://slf4j.org/faq.html

我檢查可用的方法記錄儀對象:

,發現接口:

更深入的信息,我得到:

但仍然困惑...請注意,我問爲什麼,不如何使用它們,所以這不是一個重複:

UPDATE看來,當你使用標記,你還需要編寫自定義的Java代碼,而不是做配置XML.property文件...

更新2http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN"); 
logger.error(notifyAdmin, 
    "This is a serious an error requiring the admin's attention", 
    new Exception("Just testing")); 
+0

要使用標記,您需要使用SLF4J提供的標記API。這就是你的意思是「自定義Java代碼」? – Ceki

+0

@Ceki似乎只是使用** Logger.warn(Marker,味精)**沒有給你任何好處,直到你寫過濾器的自定義類並註冊它們... ** logback.xml **的純語法沒有特殊的能力來使用** Marker **(只需用**%marker **打印) – gavenkoa

+1

http://logback.qos.ch/manual/appenders.html中提供了什麼「特別」 #OnMarkerEvaluator? – Ceki

回答

65

這是一個改頭換面的版本my answer問題 「Best practices for using Markers in SLF4J/Logback」。

標記可用於顏色或標記爲單個日誌語句。你用這些顏色做什麼,即標記,完全取決於你。然而,對於標記使用來說,兩種模式似乎很常見(第一種比第二種更普遍)。

  1. 觸發:一些附加器可以指示採取一定的標誌物存在的動作。例如,可以將SMTPAppender配置爲每當記錄事件標記爲NOTIFY_ADMIN標記時發送電子郵件,而不考慮日誌級別。請參閱logback文檔中的marker-based triggering。您還可以結合日誌級別和標記進行觸發。

  2. 過濾例如,您可以使用顏色「DB」對所有持久性相關日誌(在各種和多個類文件中)進行着色/標記。然後,您可以過濾「DB」:禁用日誌記錄,除了標有數據庫的日誌語句。有關更多信息,請參閱logback文檔中的chapter on filters(搜索MarkerFilter)。

在標記出現之前,爲了實現類似的行爲,您可以選擇1)使用自定義級別2)使用修改後的記錄名稱。 SLF4J API目前不支持自定義級別。對於選項2,如果需要修改一個或兩個記錄器,則後綴(或前綴)記錄器名稱是可行的。這種方法很快就會變得不切實際,因爲相關的配置文件變得難以管理,所以需要對3個或更多的記錄器進行「分類」。

相關問題