首页 > 解决方案 > Logback-spring.xml 无法将多行堆栈跟踪压缩到单行

问题描述

我在 SO 上尝试了多种解决方案,但似乎没有一个对我有用。我对 Logback 也很陌生,这可能是我无法为我的用例找到正确方法的原因。

基本上,我们将日志推送到集中管理的日志服务,我们需要在单行中发送堆栈跟踪,以避免增加摄取率(每行是日志服务中的新日志)并使调试更容易。

示例错误日志:

14:50:41.856 错误 [] 8 --- [trace=394a5287-6719-41b3-91e3-47b68b356856,span=394a5287-6719-41b3-91e3-47b68b356856] [jetty-274] cefscacontrollers.BaseController:处理请求时出错:

com.ExceptionClass : 发生异常

在 com.SomeClass.somefunction(SomeClass:237)

等等,我想把这些都放在一个语句中

这是我的logback-spring.xml文件的样子

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

<configuration>

    <!-- Read https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html -->

    <!-- Taken from https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/defaults.xml -->
    <conversionRule conversionWord="clr"
                    converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="ex"
                    converterClass="org.springframework.boot.logging.logback.ThrowableProxyConverter" />
    <conversionRule conversionWord="wex"
                    converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx"
                    converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />

    <!-- We use an additional new line %n at the end of every line so that read_mode=1
       can be enabled for log service This enables us to add stack traces to the corresponding
       error line automatically. See https://sites.google.com/a/flipkart.com/logsvc/home/components/ingestion-frontend/file-based-handoff/nuances -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%n%clr(%d{HH:mm:ss.SSS}){faint} %highlight(${LOG_LEVEL_PATTERN:-%5p}) [%marker] %clr(${PID:- }){magenta} %clr(---){faint} [trace=%X{X-Trace-Id:-},span=%X{X-Span-Id:-}] %magenta([%t]){faint} %yellow(%-40.40logger{39}){cyan}%clr(:){faint} %m${LOG_EXCEPTION_CONVERSION_WORD:-%throwable}%n" />

    <appender name="DEBUG_LEVEL_REMAPPER"
              class="org.springframework.boot.logging.logback.LevelRemappingAppender">
        <destinationLogger>org.springframework.boot</destinationLogger>
    </appender>

    <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR" />
    <logger name="org.apache.catalina.util.LifecycleBase" level="ERROR" />
    <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN" />
    <logger name="org.apache.sshd.common.util.SecurityUtils" level="WARN" />
    <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN" />
    <logger name="org.crsh.plugin" level="WARN" />
    <logger name="org.crsh.ssh" level="WARN" />
    <logger name="org.eclipse.jetty.util.component.AbstractLifeCycle"
            level="ERROR" />
    <logger name="org.hibernate.validator.internal.util.Version" level="WARN" />
    <logger
            name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration"
            level="WARN" />
    <logger name="org.springframework.boot.actuate.endpoint.jmx"
            additivity="false">
        <appender-ref ref="DEBUG_LEVEL_REMAPPER" />
    </logger>

    <!-- http://logback.qos.ch/manual/appenders.html -->


    <!-- Taken from https://github.com/spring-projects/spring-boot/blob/master/spring-boot/src/main/resources/org/springframework/boot/logging/logback/console-appender.xml -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <!-- Log to the console in addition to the log file -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>

我知道我需要更新这一行

    <property name="CONSOLE_LOG_PATTERN"
              value="%n%clr(%d{HH:mm:ss.SSS}){faint} %highlight(${LOG_LEVEL_PATTERN:-%5p}) [%marker] %clr(${PID:- }){magenta} %clr(---){faint} [trace=%X{X-Trace-Id:-},span=%X{X-Span-Id:-}] %magenta([%t]){faint} %yellow(%-40.40logger{39}){cyan}%clr(:){faint} %m${LOG_EXCEPTION_CONVERSION_WORD:-%throwable}%n" />

但我不知道怎么做。

这是我尝试过的

<property name="CONSOLE_LOG_PATTERN"
              value="%n%clr(%d{HH:mm:ss.SSS}){faint} %highlight(${LOG_LEVEL_PATTERN:-%5p}) [%marker] %clr(${PID:- }){magenta} %clr(---){faint} [trace=%X{X-Trace-Id:-},span=%X{X-Span-Id:-}] %magenta([%t]){faint} %yellow(%-40.40logger{39}){cyan}%clr(:){faint} %m${LOG_EXCEPTION_CONVERSION_WORD:-%throwable} %replace(%msg){'\n', ''}%n" />

但它没有按预期工作

提前致谢

标签: logbackspring-logback

解决方案


推荐阅读