2016-10-27 8 views
0

log4jアペンダーを使用して、tomcat webappから送信されたエラーを送信しています。これは、リクエストのメインスレッドで発生するエラーに最適です.URL、リクエストパラメータ、Cookie、ヘッダーなどの余分なhttp情報がすべて取得されます。別のスレッドから送信されたHTTPリクエスト情報を追加する

しかし、リクエストの中には、 org.springframework.core.task.TaskExecutor.execute()を使用してください。これらのスレッドでエラーをログに記録すると、sentryの情報はほとんど得られません。親スレッドのコンテキストをエラーにアタッチする方法はありますか?

答えて

1

この追加情報を追加するには、MDC機能を使用している可能性があります。 MDC情報はThreadLocal記憶域に格納されます。つまり、記憶域が結び付けられているスレッドでのみ利用可能です。

追加情報が利用可能であることを確認する1つの方法は、コンテキストマップを子スレッドに渡すことによって、タスクを生成するスレッドのMDC情報がエグゼキュータスレッドで使用可能になるようにすることです。

// This is the parent (main thread) 
final Map<String, String> contextMap = MDC.getCopyOfContextMap(); 

executorService.execute(new Task(contextMap) { 
    public final void run() { 
     // This is run by the child. 
     MDC.setContextMap(contextMap); 

     ... 
    } 
}); 
+0

興味深いことに、私はそれを試してみる必要があります。これは動作しますか? 'final Map contextMap = MDC.getCopyOfContextMap(); threadPoolTask​​Executor.execute(() - > { MDC.setContextMap(contextMap);}) ' – onlynone

+1

これもうまくいくはずです。 executorスレッドが実行する必要があるものを実行する前に、MDCコンテキストを設定する必要があります。 –

関連する問題