12

我已经阅读了 2 个小时的 logback 手册,但仍然不知道如何做我需要的事情。

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

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

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

此配置的问题在于它会将每个级别 >= TRACE 记录到两个附加程序。

我可以让根只有控制台,并定义一个文件记录器:

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

但后来我不得不像这样调用普通的记录器:

LoggerFactory.getLogger(ClientClass.class);

文件记录器是这样的:

LoggerFactory.getLogger("file_logger");

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

这可能吗?

4

3 回答 3

23

将其放入您的文件附加程序定义中:

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

ThresholdFilter位于logback-classic.jar. _

于 2013-10-30T17:05:02.547 回答
5

我不明白为什么这里的错误答案被赞成。这家伙只想要他的文件中的错误消息。

以下是正确答案:

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

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

于 2018-11-27T15:38:58.603 回答
0

参考以下代码:

<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>
于 2020-05-04T17:19:43.987 回答