2013-09-16 28 views
35

我很高興地使用SLF4J與logback並使用2 appenderROOT記錄器。如何用logback創建2個不同的ROOT記錄器?

<root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="FILE" /> 
</root> 

我們怎麼能有不同的日誌級別都追加程序?我仍然需要所有ROOT記錄器消息。 (所以需要根Logger)

  • DEBUG -level爲STDOUT
  • 信息 -level爲FILE

的所有日誌的需要是輸出的一部分。

所有幫助熱烈讚賞。謝謝。

回答

44

你永遠不會有超過一個根記錄器,所以你的問題有點誤導。你在尋找的是如何微調每個appender記錄哪些事件。

而對於這一點,你一個ThresholdFilter添加到每個追加程序的:

http://logback.qos.ch/manual/filters.html#thresholdFilter

<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> 
    <level>INFO</level> 
</filter> 

配置級別爲INFO的文件,附加器和調試標準輸出。

編輯:我不得不對另一個答案負責,這是錯誤的:是的,您可以在配置中擁有多個root-元素。儘管如此,這並不會創建多個root-記錄器,這正是問題標題所要求的。另外,下http://logback.qos.ch/manual/configuration.html#syntax(突出礦)的的logback手冊指出:

儘管如此,配置文件的非常基本的結構可以 被描述爲,< configuration>元素,其次是零個或多個 <附加器>元素,然後是零個或多個<記錄器>元素, 後面跟着最多一個 < root>元素。

它可能有效,但至少它違背了約定。

+0

我'<記錄器名稱= 「ch.qos」 級= 「OFF」/>'並且它仍然記錄在兩個配置的appender中,怎麼可能? – piechuckerr

+0

我懷疑任何人都可以用盡可能少的信息來幫助你。如果你有問題需要解決,請打開一個新的問題,評論不是這個地方。 – sheltem

+0

它似乎工作,但不僅是文檔,而且代碼顯示只支持一個根記錄器,所以我懷疑根記錄器的一些功能正在被遺漏。例如。如果您聲明2個根記錄器,並且其中一個具有不同的級別,那麼默認級別是什麼?請注意[源代碼](https://github.com/qos-ch/logback/blob/master/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java)如何創建和在構造函數中初始化_single_根記錄器。 – Rhubarb

6

以前的答案是錯:你可以有多個root元素,每個都有一個關聯的日誌記錄levelappender-ref(我用的logback工作。版本>1.0.13) 在這種情況下,你也必須把裏面你追加程序的過濾器,這樣的:

<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> 
    <resetJUL>true</resetJUL> 
</contextListener> 

<!-- To enable JMX Management --> 
<jmxConfigurator/> 

<appender name="console-info" class="ch.qos.logback.core.ConsoleAppender"> 
    <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
    <level>INFO</level> 
    <onMatch>ACCEPT</onMatch> 
    <onMismatch>DENY</onMismatch> 
    </filter> 
    <encoder> 
     <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
    </encoder> 
</appender> 

<appender name="console-debug" class="ch.qos.logback.core.ConsoleAppender"> 
    <filter class="ch.qos.logback.classic.filter.LevelFilter"> 
    <level>DEBUG</level> 
    <onMatch>ACCEPT</onMatch> 
    <onMismatch>DENY</onMismatch> 
    </filter> 
    <encoder> 
     <pattern>[%d{ddMMMyyyy HH:mm:ss.SS}]%-5level %logger{45} - %msg %n</pattern> 
    </encoder> 
</appender> 


<root level="info"> 
    <appender-ref ref="console-info"/> 
</root> 
<root level="debug"> 
    <appender-ref ref="console-debug"/> 
</root> 

+7

那麼違背了文檔:http://logback.qos.ch/manual/configuration。 html#語法..「最多一個元素」 –

+1

您的配置具有誤導性。你的'console-debug'只記錄日誌,只有'debug'級別(例如,不是'warn'),''console-info'只記錄'info'級別。 –

+0

有了雙根定義,appenders會累積嗎?我認爲根據手動「信息」,「警告」和「錯誤」級別的消息將進入兩個日誌(假設沒有爲appender設置過濾器)。我對嗎? –

相關問題