【问题标题】:suppressing info messages from logback抑制来自 logback 的信息消息
【发布时间】:2016-12-22 04:18:27
【问题描述】:

我工作的应用程序将被创建为 jar 文件并通过命令行运行它。不涉及应用程序服务器。 当我运行下面的 jar 文件时,来自 logback 的信息会打印在控制台上。我如何抑制来自 logback 包的所有日志记录

13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
13:46:30,534 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/util/target/classes/logback.xml]
13:46:30,588 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
13:46:35,598 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
13:46:35,605 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [stdout]
13:46:35,621 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
13:46:35,629 |-WARN in ch.qos.logback.classic.encoder.PatternLayoutEncoder@326de728 - [outputPatternAsPresentationHeader] property is deprecated. Please use [outputPatternAsHeader] option instead.
13:46:35,661 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.springframework] to false
13:46:35,661 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - org.springframework level set to ERROR
13:46:35,661 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[org.springframework]
13:46:35,661 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [ch.qos.logback] to OFF
13:46:35,661 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [ch.qos.logback] to false
13:46:35,665 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:27 - no applicable action for [priority], current ElementPath  is [[configuration][root][priority]]
13:46:35,666 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [stdout] to Logger[ROOT]
13:46:35,666 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
13:46:35,666 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@25618e91 - Registering current configuration as safe fallback point

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender" >
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" additivity="false">
        <level value="error"/>
        <appender-ref ref="stdout"/>
    </logger>

    <logger name="ch.qos.logback" level="OFF" additivity="false" />

    <root>
        <priority value="warn"/>
        <appender-ref ref="stdout"/>
    </root>

</configuration>

尝试了所有选项以及线程Suppress all Logback output to console?的讨论。

没有任何帮助,任何指针都会有所帮助。我在 logback 版本 1.0.13 和 slf4j 1.7.5

【问题讨论】:

    标签: logback slf4j


    【解决方案1】:

    首先,正确的方法。

    修复WARN/ERROR问题。

    这是相关的logback docs。如果在初始化期间有任何ERRORWARN 级别问题,则在 logback 初始化期间收集的状态消息将打印到控制台。因此,摆脱控制台输出的一个好方法是修复您收到的 ERRORWARN 消息。

    你可以看看StaticLoggerBinder的源码。

     if(!StatusUtil.contextHasStatusListener(defaultLoggerContext)) {
       StatusPrinter.printInCaseOfErrorsOrWarnings(defaultLoggerContext);
     }
    

    它不会通过您注册的记录器,因为这些是在初始化 logback 之前生成的状态消息。这是一个 catch-22,您需要一个正确配置的 logback 上下文来记录有关它如何启动失败的错误消息。

    您可以更改对这些控制台消息的处理方式,但这可能是您了解日志记录不起作用的唯一原因。

    在您的配置中要修复的一件事是将根更改为

    <root level="WARN">
        <appender-ref ref="stdout"/>
    </root>
    

    有一个错误信息告诉你优先级不是一个有效的元素

    13:46:35,665 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:27 - no applicable action for [priority], current ElementPath  is [[configuration][root][priority]]
    

    修改或禁止状态消息记录

    在你的 logback.xml 中设置一个statusListener

    <configuration>
        <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />  
    </configuration>
    

    logback 提供的选项有:

    • NopStatusListener:什么都不做
    • OnConsoleStatusListener : 将所有状态消息记录到标准输出
    • OnErrorConsoleStatusListener : 将所有状态消息记录到 stderr
    • StatusListenerAsList :在列表中收集状态供您以后访问

    【讨论】:

    • 感谢 roby 提供信息,我已根据您的建议修复了警告和错误消息,并将 statuslistener 保留为 NopStatusListener。现在我没有看到来自 logback 的任何日志记录信息
    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多