ホームページ  >  記事  >  Spring Boot ロギング - トレースログプレフィックスを削除する方法

Spring Boot ロギング - トレースログプレフィックスを削除する方法

PHPz
PHPz転載
2024-02-09 21:03:081127ブラウズ

php エディタ Zimo は、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 番目のログはメッセージ内にトレース情報が含まれる単なるトレース ログです。

メッセージがある限り、最初の行は問題ありません。ただし、2 行目では、メッセージ内のトレース ログ ({ taceid で始まる) を出力したいだけです。私のログバック構成を以下に投稿します

リーリー

これは、stdout パターンをカスタマイズする logback-spring XML です。 %message では、トレース情報を json 形式で取得し、「net.logstash.logback.encoder.loggingeventcompositejsonencoder」クラスが、メッセージの各サブフィールドにバックスラッシュを含む json に変換しています。

したがって、ここでの要件は、トレース メッセージのプレフィックスを削除して、json である %message のみが出力されるようにすることです。

また、すべてのサブフィールドにバックスラッシュが挿入されないように、json エンコーダーも削除します。

コンパイル時にエラーを発生させるクラスを削除するのに飽きて、コア エンコーダを提供しようとしましたが、これもコンパイル時にログバック構成エラーを発生させました。

c.c.s.config.sleuth.loggingspanreporter クラスによって生成されたログのすべてのプレフィックスを削除する方法が見つかりませんでした。

loggingspanreporter にログ行がある場合にのみトレースを出力し、json エンコーダー クラスを削除する方法を提案してください。私が必要なのは、kibana がサブフィールドに解析するための json 形式だけです。

解決策

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

これでスキーマの問題は解決し、kibana は json を解析してフィールドにマッピングすることができました。このアペンダーは、sleuth.loggingspanreporter クラスによって生成されたログをターゲットとしています。 そしてパターンを適用し、%message 内のトレースのみを出力します。

以上がSpring Boot ロギング - トレースログプレフィックスを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。