Java 使用logback格式化日志

Java 使用logback格式化日志,java,spring,logging,spring-boot,logback,Java,Spring,Logging,Spring Boot,Logback,我正在开发一个应用程序spring boot。我使用logback作为日志侧。我需要像这样格式化日志 aaa-mm-dd HH:mm:ss ## level ## TheNameOfMyApplication ## typeOfLogs ## class ## message 这是我的文件logback.xml的一个片段 <?xml version="1.0" encoding="UTF-8"?> <configuration>

我正在开发一个应用程序spring boot。我使用logback作为日志侧。我需要像这样格式化日志

aaa-mm-dd HH:mm:ss ## level ## TheNameOfMyApplication ## typeOfLogs ## class  ## message
这是我的文件logback.xml的一个片段

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

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
        
        <Pattern>
            %d{yyyy-MM-dd HH:mm:ss} ## %-5level## TheNameofMyApplication ## %logger{36}##%msg%n
        </Pattern>
        </layout>
    </appender>

    <logger name="org.springframework.web" level="info" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>

    <logger name="com.myapp" level="info" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>

    <root level="error">
        <appender-ref ref="STDOUT" />
    </root>

</configuration>
如何传入logger.info参数,例如,我的日志类型。我有三种类型:

技术、应用和其他
致意

您可以使用MDC映射的诊断上下文,在PatternLayout中使用%X说明符。您的模式应该如下所示:

<Pattern>
    %d{yyyy-MM-dd HH:mm:ss} ## %-5level%X{nameofapplication} %logger{36}##%msg%n
</Pattern>
请参阅以下文档:

对于slf4j/logback,为了设置MDC默认值,当未指定条目时,需要使用分隔符:-例如:

因此,您的模式应该是:

<Pattern>
    %d{yyyy-MM-dd HH:mm:ss} ## %-5level%X{nameofapplication:-technical} %logger{36}##%msg%n
</Pattern>

谢谢@alfcope,我觉得很好用。是否有可能为该变量设置默认值?是否可以在私有静态最终记录器Logger=LoggerFactory.getLoggerMyClassTest.class之后,在每个类中调用一次MDC.putnameofapplication,technical;然后是MDC.putnameof应用程序,技术人员认为这是不可能的,因为MDC是基于每个线程管理数据的。正如文档所述,诸如put和get之类的MDC操作只影响当前线程的MDC。在多线程应用程序中,如web应用程序,不同的请求将由不同的线程处理。
%{variable:-default value}
<Pattern>
    %d{yyyy-MM-dd HH:mm:ss} ## %-5level%X{nameofapplication:-technical} %logger{36}##%msg%n
</Pattern>