私はカスタムシステムを開発しています。私たちが分散システムに持っているすべてのスプリングブートアプリケーションの自動構成を提供する目的で、構成を変更する必要があるときは、変更を適用するすべてのアプリケーションを横断するのではなく、一箇所で行うことができます。代わりに、依存性のバージョンの更新だけで十分です。私は今、logbackするこだわりのため、ログおよびトレースを分散さをカバーしたいトピック以来ロギングと分散トレースのためのSpringブートカスタムスターター
、将来的にもlog4j2サポートを提供することを考えて、スターターは、次の依存関係が含まれています
spring-boot-starter-web
この上
spring-cloud-starter-sleuth
私の最初のテイクは、スターターの自動構成モジュールのsrc/main/resources
フォルダにlogback.xml
ファイルを含めるようにしましたスターターを消費するアプリケーションが構成を取得します。
スルースがクラスパスにあるときに私がいる問題はEnvironmentPostProcessorが[app name, traceId, spanId, exported]
タプル、bootstrap
の代わりに、アプリケーション内のspring.application.name
で定義された名前で表示されるアプリ名を持つレベルのパターンを更新したときに、あります。この問題を解決するためのスターターを使用して、アプリケーションのYMLファイルではなく、必ず理由を、理由の手掛かりを見つけることができませんでした:(
だから、私は次のようでした:
とパターン${LOG_LEVEL_PATTERN:-%5p}
に置き換え
%5p
と追加してくださいパターンでは、[%X{X-B3-TraceId:-},%X{X-B3-SpanId:-}]
- を使用して、トレース情報を
@Value("${spring.application.name}")
、次にMDC#put
というアプリケーション名でオートワイヤリングするフィルタを使用します。
私は、このアプローチはHTTPリクエストに対してのみ機能するが、それ以外の方法はありませんので、アプリケーションがJMS/Spring Cloud Streamとの非同期通信も利用するので、それは十分ではないことに気付きました。
次に、アプリケーション名をMDC
に追加することを考えました.ApplicationContextInitializerは、すべてのユースケース(HTTPリクエスト、メッセージングなど)で利用できると考えていました。しかし残念なことに、アプリケーションの起動時にログの値が表示され、HTTPリクエスト(メッセージはまだ試していませんが、そこには存在しないという感覚です)の値は消えました。
私は一種のこだわっていると、それが見えることができますので、何がMDCにspring.application.name
の値を取得達成するための最良の方法/メカニズムになり、見て他にどこかわからないので、だから、質問が、ありますすべてのログに?
ありがとうございます!