如何用logback创build2个不同的ROOTlogging器?

我很高兴地使用SLF4J和logback,并为ROOTlogging器使用了2个appender

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

我们怎么能为两个appender有不同的日志级别? 我仍然需要所有ROOTlogging器消息。

  • DEBUG – 标准输出
  • INFO级别的文件

所有日志都需要成为输出的一部分(所以需要ROOTlogging器)。

所有的帮助是热烈的赞赏。 谢谢。

你永远不会有一个以上的根logging器,所以你的问题有点误导。 你在找什么是如何微调每个appenderlogging哪些事件。

为此,你为每个appender添加一个ThresholdFilter:

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

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

configurationFILE-appender的级别INFO和STDOUT的DEBUG。

编辑:我不得不对另一个答案负责,这是错误的:是的,你可以在configuration中有多个根元素 。 但是,这并不能创build一个以上的根目录,这就是问题标题所要求的。 此外, http : //logback.qos.ch/manual/configuration.html#syntax (突出显示我的)下面的logback手册:

尽pipe如此,configuration文件的基本结构可以描述为<configuration>元素,接着是零个或多个<appender>元素,接着是零个或多个<logger>元素, 最多是一个 <root>元素。

它可能有用,但至less是违反惯例。

以前的答案是错误的 :你可以有多个root元素,每个元素都有一个关联的日志logginglevel和一个appender-ref (我正在使用logback.version> 1.0.13 )在这种情况下,你也必须在你的内部放置一个FILTER这样的appender:

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