2016-11-30 4 views
0

最近まで私はスプリングブート1.3.5.RELEASEを使用していました。 スプリングブートMDC継承の動作が変更されていますか?

@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ロガーを使用して、アプリケーション全体の各ログ行にservice_nameを記録しました。 これは子スレッドであっても当てはまりました。 MVCコントローラ。

春バージョン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に」で今欠けています。私はMDCコンテキストはコントローラメソッドの開始時に空であることをデバッガで見ることができます

2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - myapp [,,] - Received get <snip> 

:それはのように見えた変更前

2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - [,,] - Received get <snip> 

誰でもこの動作にどのような変更が影響しているか知っていますか?多分、春MVCスレッドの作成に変更?またはログバックの変更? アプリケーション全体のMDCプロパティをSpring起動時に設定して保持する方法はありますか? MDC値はスレッド地元の人々、あなたの春のブートアプリが値を持って開始しますので、唯一のメインスレッド上に保存されている

おかげ

答えて

0

。 MDCは通常動的コンテンツに使用され、静的には使用されません(アプリケーション名は変更されません)。着信要求ごとにMDC値を入力するフィルターを追加できます。

 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
      <Pattern>%date [myapp] [%thread] %-5level %logger{36} - %msg%xEx%n</Pattern> 
     </encoder> 

私はあなたにlogback-spring.xmlファイルをこのようなものを使用することをお勧めします

関連する問題