如何使用logback创建2个不同的ROOT记录器?

问题描述 投票:40回答:2

我很高兴使用SLF4J进行回溯并使用2个appender作为ROOT记录器。

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

我们怎样才能为两个appender提供不同的日志级别?我仍然需要所有ROOT-logger消息。

  • STDOUT的DEBUG级别
  • 文件的信息级别

所有日志都需要成为输出的一部分(因此需要ROOT记录器)。

logging root logback slf4j
2个回答
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-logger,这就是问题的标题所要求的。此外,在http://logback.qos.ch/manual/configuration.html#syntax(突出显示我的)下的logback手册:

尽管如此,配置文件的基本结构可以描述为<configuration>元素,后跟零个或多个<appender>元素,后跟零个或多个<logger>元素,后跟最多一个<root>元素。

它可能会起作用,但至少它违背惯例。


4
投票

之前的答案是错误的:你可以有多个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>

© www.soinside.com 2019 - 2024. All rights reserved.