Heim > Java > Spring Boot Logging – So entfernen Sie das Trace-Log-Präfix

Spring Boot Logging – So entfernen Sie das Trace-Log-Präfix

PHPz
Freigeben: 2024-02-09 21:03:08
nach vorne
1164 Leute haben es durchsucht

Der PHP-Editor Zimo bietet Ihnen Inhalte im Zusammenhang mit der Spring Boot-Protokollierung. Bei der Verwendung von Spring Boot für die Anwendungsentwicklung stoßen wir häufig auf das Problem, Protokollpräfixe zu verfolgen, die die Lesbarkeit und Ästhetik von Protokollen beeinträchtigen. In diesem Artikel erfahren Sie, wie Sie das Trace-Log-Präfix entfernen, um Ihre Protokolle übersichtlicher zu gestalten. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel wird Ihnen helfen. Lassen Sie uns als Nächstes die Lösung für dieses Problem untersuchen!

Frageninhalt

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"}
Nach dem Login kopieren
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\"}}"}
Nach dem Login kopieren

Dies sind die Anwendungsprotokolle meiner Springboot-Anwendung. Im ersten Protokoll befinden sich tatsächliche Nachrichten, das zweite Protokoll ist nur ein Trace-Protokoll mit Trace-Informationen in den Nachrichten.

Solange es Neuigkeiten gibt, ist die erste Zeile in Ordnung. Aber in der zweiten Zeile möchte ich nur das Trace-Protokoll in der Nachricht drucken (beginnend mit { taceid ). Ich werde meine Logback-Konfiguration unten veröffentlichen

<?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>
Nach dem Login kopieren

Dies ist meine Logback-Spring-XML, in der ich das Standardausgabemuster anpassen möchte. In %message habe ich die Trace-Informationen im JSON-Format abgerufen und die Klasse „net.logstash.logback.encoder.loggingeventcompositejsonencoder“ konvertiert den JSON in JSON, wobei in jedes Unterfeld der Nachricht Backslashes eingefügt werden.

Hier besteht die Anforderung darin, das Präfix der Trace-Nachricht zu entfernen, damit nur %message ausgegeben wird, was JSON ist.

Und entfernen Sie auch den JSON-Encoder, damit ich diese Backslashes nicht in jedes Unterfeld einfüge.

Ich hatte es satt, Klassen zu entfernen, die mir beim Kompilieren Fehler verursachten, und habe auch versucht, einen Core-Encoder bereitzustellen, der ebenfalls beim Kompilieren Fehler bei der Logback-Konfiguration verursachte.

Ich habe keine Möglichkeit gefunden, alle Präfixe für Protokolle zu entfernen, die von der Klasse c.c.s.config.sleuth.loggingspanreporter generiert wurden.

Bitte schlagen Sie eine Möglichkeit vor, die Ablaufverfolgung nur dann zu drucken, wenn der Loggingspanreporter Protokollzeilen hat, und entfernen Sie die JSON-Encoder-Klasse. Ich möchte lediglich das JSON-Format, damit Kibana es in Unterfelder analysieren kann.

Lösung

<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>
Nach dem Login kopieren

Dadurch wurde mein Schemaproblem gelöst. Kibana konnte den JSON analysieren und in Felder abbilden. Dieser Appender zielt auf Protokolle ab, die von der Klasse sleuth.loggingspanreporter generiert werden und wendet das Muster an und druckt nur Spuren innerhalb von %message.

Das obige ist der detaillierte Inhalt vonSpring Boot Logging – So entfernen Sie das Trace-Log-Präfix. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage