2016-04-07 5 views
5

私たちは、シンクと非同期操作を持つ複雑なフローを持つ巨大なレガシーコードを持っています。したがって、実行された操作が異なるスレッドで実行され、スレッドが複数の実行コンテキストにあるすべてのログメッセージで、特定の要求の一意のIDをログに記録する必要があります。すべての実行コンテキストにわたって再生フレームワークログのリクエストIDをログに記録する方法

私はMDCを使って、logger.xmlで以下のブログで与えられたカスタム%akkaディスパッチャを使って%X {req_id}を指定しようとしましたが、複数の実行コンテキストでは動作せず、動作しませんreq_id nullを返すことがある単一の実行コンテキストで確実に実行されます。 (http://yanns.github.io/blog/2014/05/04/slf4j-mapped-diagnostic-context-mdc-with-play-framework/

複雑で巨大なコードベースのため、すべての関数呼び出しで要求IDを渡すことができません。最小限の変更でこれを達成できる方法はありますか?私たちは、再生フレームワークによっても生成されたログにそのリクエストIDが必要です。

答えて

0

デバッグ目的でいくつかのトレーストークンを記録するのと同じ必要性がありました。 Kamonライブラリには既にこの機能がありますhttp://kamon.io/integrations/logback/trace-token-converter/

私のGlobal.javaでは:onStart()でKamon.start()を実行し、onRequest()でコンテキストを維持します。ロギングパターンではtraceTokenも使用してください。

+0

ただし、playのすべての実行コンテキストではonRequest()を使用できません。私の理解によれば、そうですか? – user3828976

+0

'onRequest()'はリクエストがあったときにのみ利用可能です。他のすべてのコンテキストで同様に 'TraceContext'を作成して終了しなければなりません。 – hrushikesh

+0

シングル実行コンテキストに移行して解決しました。 – user3828976

0

私たちはこれをシングルエグゼキュータのコンテキストに移して解決しました。これを行うには2.5もお勧めします。このシナリオでは、mdcコンテキストが機能します。

+0

だからあなたはそれを解決しましたが、どうですか?これは単なる解説ではありません! application.confの –

+0

に異なる実行コンテキストを定義しておく必要があります。ちょうど1つを使用しない、私は今confファイルのコピーを持っていない。 – user3828976

関連する問題