抑制来自 logback 的信息消息

suppressing info messages from logback

我工作的应用程序将被创建为 jar 文件,并且 运行 它通过命令行创建。不涉及应用程序服务器。 当我 运行 来自 logback 的信息下面的 jar 文件打印在控制台上。我如何禁止来自 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

第一,方法对。

修复 WARN/ERROR 个问题。

这是相关的 logback docs。如果在 init 期间有任何 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:在列表中收集状态供您稍后访问