Editor PHP Zimo membawakan anda kandungan yang berkaitan dengan pengelogan Spring Boot. Apabila menggunakan Spring Boot untuk pembangunan aplikasi, kami sering menghadapi masalah menjejak awalan log, yang menjejaskan kebolehbacaan dan estetika log. Artikel ini akan menunjukkan kepada anda cara mengalih keluar awalan log surih untuk menjadikan log anda lebih jelas. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan membantu anda. Seterusnya, mari kita terokai penyelesaian kepada masalah ini!
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\"}}"}
Ini adalah log aplikasi daripada aplikasi springboot saya. Dalam log pertama, terdapat mesej sebenar, log kedua hanyalah log jejak dengan maklumat surih di dalam mesej.
Selagi ada berita, baris pertama boleh. Tetapi pada baris kedua saya hanya mahu mencetak log jejak di dalam mesej (bermula dengan { taceid ). Saya akan menyiarkan konfigurasi log balik saya di bawah
<?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>
Ini ialah logback-spring xml saya di mana saya ingin menyesuaikan corak stdout. Dalam %message saya telah mengambil maklumat surih dalam format json dan kelas "net.logstash.logback.encoder.loggingeventcompositejsonencoder" sedang menukar json kepada json dengan garis miring ke belakang masuk ke setiap submedan mesej.
Jadi keperluan di sini adalah untuk mengalih keluar awalan mesej jejak supaya ia hanya mencetak %message iaitu json.
Dan juga keluarkan pengekod json supaya saya tidak memasukkan garis miring ke belakang ini dalam setiap submedan.
Saya bosan mengalih keluar kelas yang memberi saya ralat pada masa penyusunan dan juga cuba menyediakan pengekod teras yang turut memberikan ralat konfigurasi log balik pada masa penyusunan.
Saya tidak menemui cara untuk mengalih keluar semua awalan untuk log yang dijana oleh kelas c.c.s.config.sleuth.loggingspanreporter.
Sila cadangkan cara untuk hanya mencetak jejak apabila loggingspanreporter mempunyai baris log dan mengalih keluar kelas pengekod json. Apa yang saya mahu ialah format json untuk kibana menghuraikan ke dalam subbidang.
<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>
Ini menyelesaikan isu skema saya, kibana dapat menghuraikan json dan memetakannya ke dalam medan. Penambah ini menyasarkan log yang dijana oleh kelas sleuth.loggingspanreporter Dan gunakan corak dan cetak hanya surih dalam %message.
Atas ialah kandungan terperinci Pengelogan but musim bunga-cara mengalih keluar awalan log surih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!