logback 中无法识别控制台模式-spring.xml

console pattern not recognized in logback-spring.xml

我已经在 Whosebug 上查找过,但没有找到可比的东西。

我使用 spring 引导并具有以下依赖项:

spring-boot 2.2.1 with
spring-boot-starter-logging 2.2.1
logback-core 1.2.3
logback-classic 1.2.3

我想为我的日志输出使用自定义模式以在控制台上打印我的 mdc.variables。通过 application.properties

起作用
logging.level.com.mypackage=TRACE
logging.pattern.level=%d{yyyy-MM-dd HH:mm:ss} [%t] [myMdc:%X{myMdcVariable}] %-5level %logger{36} - %m%n

但是我得到了双重条目,但我无法通过 application.properties 设置可加性 属性。我必须使用 logback-spring.xml。看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>

    <logger name="com.mypackage" level="TRACE" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%t] [myMdc:%X{myMdcVariable}] %-5level %logger{36} - %m%n
            </Pattern>
        </encoder>
    </appender>
</configuration>

这解决了双重条目。但是该模式不适用于日志输出。我可以有双重条目或没有模式,因为不可能通过 application.properties 和 logback-spring.xml 组合配置。我做错了什么?

我终于找到问题所在了。我检查了 defaults.xml 和 github 上的 ConsoleAppender.xml 例如

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/console-appender.xml

解决方案是定义常数 CONSOLE_LOG_PATTERN。并在导入 defaults.xml 和 console-appender.xml

之前定义它

我的工作配置文件现在看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [%t] [myMdc:%X{myMdcVariable] %-5level %logger{36} - %m%n"/>

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>

    <logger name="com.mypackage" level="TRACE" additivity="false">
        <appender-ref ref="CONSOLE"/>
    </logger>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>
                ${CONSOLE_LOG_PATTERN}
            </pattern>
        </encoder>
    </appender>

</configuration>