搜索
首页JavaSpring boot 日志记录-如何删除跟踪日志前缀

php小编子墨为您带来Spring Boot日志记录的相关内容。在使用Spring Boot进行应用开发时,我们经常会遇到跟踪日志前缀的问题,这些前缀会影响日志的可读性和美观性。本文将向您介绍如何删除跟踪日志前缀,让您的日志更加清晰明了。无论您是初学者还是有一定经验的开发者,本文都将对您有所帮助。接下来,让我们一起来探索这个问题的解决方案吧!

问题内容

1.message log
{"@timestamp":"2023-12-18t22:36:22.449z","severity":"info","service":"mopservice-jcr-svc","traceid":"afa32548086d2994","spanid":"afa32548086d2994","user-id":"","iv-user":"","customer-number":"","exportable":"","pid":"1","thread":"http-nio-8443-exec-1","class":"o.a.c.m.jmx.instrumentationmanagerimpl","message":"registering mbean org.apache.cxf:bus.id=cxf619002012,type=performance.counter.server,service=\"{http://www.canadapost.ca/ws/payment/methodsofpayment/soap/2017/10}methodsofpaymentporttypeservice\",port=\"methodsofpaymentporttypeport\",operation=\"getallowedmethodsofpayment\": org.apache.cxf.management.counters.responsetimecounter@99c7fd6"}
2.trace log - message field contains trace information without any actual message.
{"@timestamp":"2023-12-18t22:36:21.076z","severity":"info","service":"mopservice-jcr-svc","traceid":"afa32548086d2994","spanid":"-5697962974162517179","user-id":"","iv-user":"","customer-number":"","exportable":"","pid":"1","thread":"http-nio-8443-exec-1","class":"c.c.s.config.sleuth.loggingspanreporter","message":"{\"traceid\":\"afa32548086d2994\",\"parentid\":\"57583fd122326bb7\",\"id\":\"b0ecc4dd35b70345\",\"kind\":\"client\",\"name\":\"micrometer://timer:get-allowed-methods-of-payment-time?action=start\",\"timestamp\":1702938981069686,\"duration\":6630,\"localendpoint\":{\"servicename\":\"micrometer://timer:get-allowed-methods-of-payment-time?action=start\",\"ipv4\":\"10.129.6.120\"},\"tags\":{\"camel.client.endpoint.url\":\"micrometer://timer:get-allowed-methods-of-payment-time?action=start\",\"camel.client.exchange.id\":\"cbe3d7cc933d03a-0000000000000001\",\"camel.client.exchange.pattern\":\"inout\"}}"}

这些是来自我的 springboot 应用程序的应用程序的日志。在第一个日志中,有实际的消息,第二个日志只是一个跟踪日志,其中消息内部有跟踪信息。

只要有消息,第一行就可以。但第二行我只想打印消息内的跟踪日志(以 { taceid 开头)。我将在下面发布我的 logback 配置

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

    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <!-- Example for logging into the build folder of your project -->

    <!-- You can override this to have a custom pattern -->
    <property name="CONSOLE_LOG_PATTERN"
              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %-5level [${springAppName},%X{traceId:-},%X{spanId:-}] %clr([%X{iv-user:-},%X{user-id:-},%X{customer-number:-}]) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

    <!-- Appender to log to console -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
            <immediateFlush>true</immediateFlush>
        </encoder>
    </appender>

    <appender name="ASYNC-CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="CONSOLE"/>
        <!-- do not discard any messages -->
        <discardingThreshold>0</discardingThreshold>
        <!-- size of the blocking queue -->
        <queueSize>500</queueSize>
    </appender>

    <!-- Appender to log to file in a JSON format -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        "severity": "%level",
                        "service": "${springAppName:-}",
                        "traceId": "%X{traceId:-}",
                        "spanId": "%X{spanId:-}",
                        "user-id":"%X{user-id}",
                        "iv-user":"%X{iv-user}",
                        "customer-number":"%X{customer-number}",
                        "exportable": "%X{spanExportable:-}",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "message": "%message"
                        }
                    </pattern>
                </pattern>
                <stackTrace>
                    <throwableConverter
                            class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
                        <maxDepthPerThrowable>10</maxDepthPerThrowable>
                        <maxLength>2048</maxLength>
                        <shortenedClassNameLength>32</shortenedClassNameLength>
                        <exclude>sun\.reflect\..*\.invoke.*</exclude>
                        <exclude>net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
                        <rootCauseFirst>true</rootCauseFirst>
                    </throwableConverter>
                </stackTrace>
            </providers>
            <immediateFlush>false</immediateFlush>
        </encoder>
    </appender>

    <appender name="ASYNC-STDOUT" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="STDOUT"/>
        <!-- do not discard any messages -->
        <discardingThreshold>0</discardingThreshold>
        <!-- size of the blocking queue -->
        <queueSize>500</queueSize>
    </appender>

    <if condition='!isDefined("LOG_LEVEL")'>
        <then>
            <property name="LOG_LEVEL" value="INFO" />
        </then>
    </if>

    <root level="${LOG_LEVEL}">
        <if condition='isDefined("ELK_OUTPUT")'>
            <then>
                <appender-ref ref="ASYNC-STDOUT" />
            </then>
            <else>
                <appender-ref ref="ASYNC-CONSOLE" />
            </else>
        </if>
    </root>
</configuration>

这是我的logback-spring xml,我想在其中自定义stdout模式。在 %message 中,我已经获取了 json 格式的跟踪信息,并且“net.logstash.logback.encoder.loggingeventcompositejsonencoder”类正在将 json 转换为 json,此时反斜杠进入消息的每个子字段。

所以这里的要求是删除跟踪消息的前缀,以便它只打印 %message,它是 json。

并且还删除 json 编码器,这样我就不会在每个子字段中插入这些反斜杠。

我厌倦了删除在编译时给我带来错误的类,并且还尝试提供核心编码器,这在编译时也给了 logback 配置错误。

我没有找到删除 c.c.s.config.sleuth.loggingspanreporter 类生成的日志的所有前缀的方法。

请建议一种方法,以便在 loggingspanreporter 有日志行时仅打印跟踪并删除 json encoder 类。我想要的只是 json 格式,以便 kibana 解析为子字段。

解决方法

<appender name="TRACE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%message%n</pattern>
<charset>utf8</charset>
<immediateFlush>true</immediateFlush>
</encoder>
</appender>
<appender name="ASYNC-TRACE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="TRACE"/>
<!-- do not discard any messages -->
<discardingThreshold>0</discardingThreshold>
<!-- size of the blocking queue -->
<queueSize>500</queueSize>
</appender>
<!--Appends Custom pattern for Trace Logs-->
<logger name="com.cpg.springboot.config.sleuth.LoggingSpanReporter" level="INFO" additivity="false">
<appender-ref ref="ASYNC-TRACE"/>
</logger>

这解决了我的模式问题,kibana 能够解析 json 并映射到字段中。此附加程序的目标是 sleuth.loggingspanreporter 类生成的日志 并应用该模式并仅打印 %message 内的跟踪。

以上是Spring boot 日志记录-如何删除跟踪日志前缀的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:stackoverflow。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)