【问题标题】:Logback: how to log only errors to fileLogback:如何仅将错误记录到文件中
【发布时间】:2013-11-10 10:30:45
【问题描述】:

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

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

这是我的 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");

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

这可能吗?

【问题讨论】:

标签: java logging slf4j logback


【解决方案1】:

把它放到你的文件 appender 定义中:

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

ThresholdFilter 位于logback-classic.jar

【讨论】:

  • 不错。我正在使用logback for android,似乎也可以使用。
  • 这也有帮助; logback.xml 的 XSD。这可以帮助您处理配置变量。 github.com/enricopulatzo/logback-XSD
  • 谢谢,你的方法奏效了。然而,这违背了root 标签上的level 属性的全部目的,因为这是它的主要特性——确定appender 的日志级别。
【解决方案2】:

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

正确答案如下:

<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

【讨论】:

  • 这是因为被投票的解决方案使用 ThresholdFilter 过滤所有错误。
  • 我明白这一点。我不明白它如何解决作者所说的问题。作者只想将错误记录到文件中。
  • 好点。我们其他人认为他想要“错误及以上”:) 更新:它出现在 logback 土地中 ERROR 是最高级别,不像 log4j 有“致命” go figure...logback.qos.ch/manual/architecture.html#basic_selection
  • 我认为与此相反的是答案应该是什么。 ACCEPT 和 DENY 应该交换他们的位置
【解决方案3】:

参考以下代码:

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

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2021-10-10
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多