我的项目中有一个 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"}
这些日志消息的内容中给出了解决方案。有一个弃用警告,不应使用布局来支持编码器。出现此警告的原因是导致 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 的完全限定名称的编码器元素内。