我很高兴使用SLF4J进行回溯并使用2个appender作为ROOT记录器。
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
我们怎样才能为两个appender提供不同的日志级别?我仍然需要所有ROOT-logger消息。
所有日志都需要成为输出的一部分(因此需要ROOT记录器)。
你不会有多个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-logger,这就是问题的标题所要求的。此外,在http://logback.qos.ch/manual/configuration.html#syntax(突出显示我的)下的logback手册:
尽管如此,配置文件的基本结构可以描述为<configuration>元素,后跟零个或多个<appender>元素,后跟零个或多个<logger>元素,后跟最多一个<root>元素。
它可能会起作用,但至少它违背惯例。
之前的答案是错误的:你可以有多个root
元素,每个元素都有一个相关的日志记录level
和一个appender-ref
(我正在使用logback.version> 1.0.13
)在这种情况下你还必须在你的appenders中放置一个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>