Spring Boot - Logback 配置 - 日志开头的烦人样板

问题描述 投票:0回答:1

我的项目中有一个 logback-spring.xml 文件,用于将日志记录配置为 IDE 中的纯文本和服务器上的 JSON。这确实工作得很好,但是 logback 在启动后直接产生大量的样板日志垃圾,这些垃圾不遵循 logback-spring.xml 中的配置,而似乎只是默认配置。

在启动开始时注销的内容看起来像这样(logback blah,然后是 spring boot 横幅,然后是我期望的实际 json 输出)

我尝试提供一个标准的 logback.xml 文件,但即使使用该文件,我也会得到相同的行为。我有什么想法可以删除这些废话(使其格式正确)吗?

08:11:15,846 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.11
08:11:15,849 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - Here is a list of configurators discovered as a service, by rank: 
08:11:15,849 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 -   org.springframework.boot.logging.logback.RootLogLevelConfigurator
08:11:15,849 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - They will be invoked in order until ExecutionStatus.DO_NOT_INVOKE_NEXT_IF_ANY is returned.
08:11:15,850 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - Constructed configurator of type class org.springframework.boot.logging.logback.RootLogLevelConfigurator
08:11:15,853 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - org.springframework.boot.logging.logback.RootLogLevelConfigurator.configure() call lasted 1 milliseconds. ExecutionStatus=INVOKE_NEXT_IF_ANY
08:11:15,853 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator
08:11:15,854 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - Constructed configurator of type class ch.qos.logback.classic.joran.SerializedModelConfigurator
08:11:15,881 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.scmo]
08:11:15,882 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.scmo]
08:11:15,882 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - ch.qos.logback.classic.joran.SerializedModelConfigurator.configure() call lasted 28 milliseconds. ExecutionStatus=INVOKE_NEXT_IF_ANY
08:11:15,882 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
08:11:15,882 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
08:11:15,882 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
08:11:15,883 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/matthiashuttar/dev/platform/kraken/libs/service-config/build/resources/main/logback.xml]
08:11:15,950 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [CONSOLE]
08:11:15,950 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
08:11:16,074 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
08:11:16,074 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
08:11:16,074 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
08:11:16,074 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [de.herakles] to INFO
08:11:16,074 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [net.schmizz] to OFF
08:11:16,074 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
08:11:16,074 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [CONSOLE] to Logger[ROOT]
08:11:16,075 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@1c9b0314 - End of configuration.
08:11:16,075 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@45385f75 - Registering current configuration as safe fallback point
08:11:16,075 |-INFO in ch.qos.logback.classic.util.ContextInitializer@1f9f6368 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 193 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY

Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts
08:11:16,488 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [CONSOLE]
08:11:16,488 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
08:11:16,488 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
08:11:16,488 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
08:11:16,488 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
08:11:16,488 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [de.herakles] to INFO
08:11:16,488 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@712ca57b - Propagating INFO level on Logger[de.herakles] onto the JUL framework
08:11:16,489 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [net.schmizz] to OFF
08:11:16,489 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@712ca57b - Propagating OFF level on Logger[net.schmizz] onto the JUL framework
08:11:16,489 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to WARN
08:11:16,489 |-INFO in ch.qos.logback.classic.jul.LevelChangePropagator@712ca57b - Propagating WARN level on Logger[ROOT] onto the JUL framework
08:11:16,489 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [CONSOLE] to Logger[ROOT]
08:11:16,489 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@4564e94b - End of configuration.
08:11:16,489 |-INFO in org.springframework.boot.logging.logback.SpringBootJoranConfigurator@54534abf - Registering current configuration as safe fallback point

                        ___
                     .-'   `'.
                    /         \
                    |         ;
                    |         |           ___.--,
           _.._     |0) ~ (0) |    _.---'`__.-( (_.
    __.--'`_.. '.__.\    '--. \_.-' ,.--'`     `""`
   ( ,.--'`   ',__ /./;   ;, '.__.'`    __
   _`) )  .---.__.' / |   |\   \__..--""  """--.,_
  `---' .'.''-._.-'`_./  /\ '.  \ _.-~~~````~~~-._`-.__.'
        | |  .' _.-' |  |  \  \  '.               `~---`
         \ \/ .'     \  \   '. '-._)
          \/ /        \  \    `=.__`~-.
          / /\         `) )    / / `"".`\
    , _.-'.'\ \        / /    ( (     / /
     `--~`   ) )    .-'.'      '.'.  | (
            (/`    ( (`          ) )  '-;
             `      '-;         (-'

{"level":"info","message":"Starting KrakenCoreApplication using Java 21.0.1 with PID 34051 (/Users/matthiashuttar/dev/platform/kraken/apps/kraken-core/build/classes/java/main started by matthiashuttar in /Users/matthiashuttar/dev/platform)","thread":"main","logger":"de.herakles.platform.kraken.krakencore.KrakenCoreApplication"}
java spring-boot logback
1个回答
0
投票

这些日志消息的内容中给出了解决方案。有一个弃用警告,不应使用布局来支持编码器。出现此警告的原因是导致 logback 打印所有这些日志信息。

当使用编码器而不是布局更改日志配置时,整个输出消失了。

就我而言,我有一个自定义的 Json 布局,我想继续使用它,现在并不关心迁移到编码器。 Logback 文档提到

LayoutWrappingEncoder
可以帮助完成此类转换,但它没有描述它是如何使用的。

我将在这里发布我的更改,以防其他人发现它有用。

这是我之前的appender配置:

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="de.herakles.platform.kraken.serviceconfig.logging.HeraklesJsonLayout">
        <appendLineSeparator>true</appendLineSeparator>
        <includeContextName>false</includeContextName>
        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"/>
    </layout>
</appender>

现在就是这样

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <layout class="de.herakles.platform.kraken.serviceconfig.logging.HeraklesJsonLayout">
            <appendLineSeparator>true</appendLineSeparator>
            <includeContextName>false</includeContextName>
            <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"/>
        </layout>
    </encoder>
</appender>

我刚刚所做的是将布局元素包装在引用 LayoutWrappingEncoder 的完全限定名称的编码器元素内。

© www.soinside.com 2019 - 2024. All rights reserved.