最近まで、私は spring-boot 1.3.5.RELEASE を使用していましたが、以下が機能しました。
@SpringBootApplication
public class MyApplication {
static {
MDC.put("service_name", "myapp");
}
public static void main(String[] args) {
SpringApplication.run(new Object[]{MyConfiguration.class}, args);
}
}
MDC put に注意してください。次に、logback logger を使用して、アプリケーション全体の各ログ行に service_name が記録されました。これは、MVC コントローラーなどの子スレッドでも当てはまりました。
現在、Spring バージョン 1.4.1.RELEASE を使用しており、service_name の MDC ロギングはメイン スレッドでのみ機能し、MVC コントローラー スレッドでは機能しません。
「myapp」はまだメイン スレッドに記録されています。
2016-11-30 14:22:08,147 [main] INFO co.uk.me.MyApplication - myapp [,,] - Started MyApplication in 14.276 seconds (JVM running for 308.404)
しかし、コントローラーのログ行に「myapp」がありません。
2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - [,,] - Received get <snip>
変更前は次のように見えました。
2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - myapp [,,] - Received get <snip>
コントローラー メソッドの開始時に MDC コンテキストが空であることをデバッガーで確認できます。
この動作に影響を与えた変更を知っている人はいますか? おそらく、Spring MVC スレッド作成への変更でしょうか? それともログバックの変更?アプリケーション全体の MDC プロパティを設定して保持する方法はありますか?
ありがとう