我很高兴使用SLF4J进行回溯,并使用 2 appenders 作为 ROOT 记录器。
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
我们怎样才能为两个appender设置不同的日志级别?我仍然需要所有ROOT-logger消息。
所有日志都需要成为输出的一部分(因此需要ROOT记录器)。
答案 0 :(得分:50)
您将不会拥有多个root-logger,因此您的问题有点误导。您正在寻找的是如何微调每个appender记录的事件。
为此,您需要为每个appender添加一个ThresholdFilter:
http://logback.qos.ch/manual/filters.html#thresholdFilter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
为FILE-appender配置级别INFO,为STDOUT配置DEBUG。
编辑:我必须质疑另一个答案,指出这个错误:是的,您可以在配置中拥有多个root- 元素。但这不会创建多个root- logger ,这就是问题标题所要求的内容。此外,归档手册在http://logback.qos.ch/manual/configuration.html#syntax下突出显示(突出显示我的):
然而,配置文件的基本结构可以 被描述为,&lt;配置&gt;元素,后跟零或更多 &LT; appender&gt;元素,后跟零或更多&lt;记录器&gt;元素, 然后是最多一个&lt; root&gt;元件。
它可能有用,但至少它违反惯例。
答案 1 :(得分:4)
上一个答案错误:您可以拥有多个root
元素,每个元素都有关联的日志记录level
和appender-ref
(我正在使用logback.version&GT; 1.0.13
)
在这种情况下,您还必须在您的appender中放置一个FILTER,如:
<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>