使用 logback 格式化日志

Vic*_*tor 2 java logging spring logback spring-boot

我正在开发一个应用程序 spring-boot。我将 logback 用于日志端。我需要像这种格式一样格式化日志。

aaa-mm-dd HH:mm:ss ## level ## TheNameOfMyApplication ## typeOfLogs ## class  ## message
Run Code Online (Sandbox Code Playgroud)

这是我的文件 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>
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能传入logger.info()参数,例如我的日志类型。我有三种类型:

  • 技术、应用及其他

此致

alf*_*ope 6

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

<Pattern>
    %d{yyyy-MM-dd HH:mm:ss} ## %-5level%X{nameofapplication} %logger{36}##%msg%n
</Pattern>
Run Code Online (Sandbox Code Playgroud)

然后,你的代码:

 MDC.put("nameofapplication", "technical");
Run Code Online (Sandbox Code Playgroud)

查看文档:LOGBack - Mapped Diagnostic Context


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

%{variable:-default value}
Run Code Online (Sandbox Code Playgroud)

所以,你的模式应该是:

<Pattern>
    %d{yyyy-MM-dd HH:mm:ss} ## %-5level%X{nameofapplication:-technical} %logger{36}##%msg%n
</Pattern>
Run Code Online (Sandbox Code Playgroud)