Logback:如何仅将错误记录到文件中

时间:2013-10-30 17:00:51

标签: java logging slf4j logback

我已经阅读了2小时的logback手册,仍然无法知道如何做我需要的。

它就像标题所说的那样简单:我只想将错误记录到文件中,而将其他级别(包括ERROR)记录到控制台。

这是我的logcat.xml文件的根部分:

    <root level="TRACE" >
        <appender-ref ref="CONSOLE_APPENDER" />
        <appender-ref ref="FILE_APPENDER" />
    </root>

此配置的问题在于它将每个级别&gt; = TRACE记录到两个appender。

我可以让root用户只使用控制台,并定义一个文件记录器:

    <logger name='file_logger' level='ERROR' >
        <appender-ref ref="FILE_APPENDER" />
    </logger>

但是我必须像这样调用普通记录器:

LoggerFactory.getLogger(ClientClass.class);

文件记录器如下:

LoggerFactory.getLogger("file_logger");

我不想为每个班级选择记录器。我只想使用class as参数从工厂获取根记录器,并根据级别执行正确的操作。

这可能吗?

3 个答案:

答案 0 :(得分:19)

将其放入文件追加器定义:

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

ThresholdFilter位于logback-classic.jar

答案 1 :(得分:1)

请参考以下代码:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

答案 2 :(得分:0)

我不明白为什么在这里会错误地回答。 这个家伙只希望在他的文件中出现错误消息。

这是正确的答案:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
  <level>INFO</level>
  <onMatch>ACCEPT</onMatch>
  <onMismatch>DENY</onMismatch>
</filter>

参考: https://logback.qos.ch/manual/filters.html#levelFilter