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!
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\"}}"}
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>
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.
<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>
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!