2016-05-13 5 views
0

多くの異なる呼び出しを行うシーケンステンプレートがあります。 すべてのコールで、いくつかのパラメータ/情報が記録されます。WSO2でのシーケンスコールの呼び出しESB

私が達成しようとしているのは、シーケンス実行中にすべての呼び出しに何らかの識別子(一意のIDと言う)を渡すことです。

目的は、主にデバッグの目的で、ログから1回の実行のすべてのステップをトレースすることです。

実際に私の頭に浮かんだ唯一のアイデアは、プログラマチカルに、シーケンスの始めにuidを作成し、それを渡してログ呼び出しで保存することです。 LogMediatorを使って、外部のパラメータから自動的に情報を抽出するようにしましたが、失敗しました(多分私は間違っているかもしれません)。

もっとスマートな方法がありますか?

答えて

0

あなたの要件はさまざまな方法で達成できます。私はそれらの可能性の一つを挙げています。

これはデバッグの目的で使用する追加の方法であるため、この目的のために別のログファイルを作成する方がよいと思います。最初に、次のような新しいファイルアペンダーを作成します。

log4j.logger.com.test.CustomDebug=DEBUG, CUSTOM_DEBUG 
log4j.additivity.com.test.CustomDebug=false 

log4j.appender.CUSTOM_DEBUG = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.CUSTOM_DEBUG.File = /home/upul/log/moredebug.log 
log4j.appender.CUSTOM_DEBUG.layout = org.apache.log4j.PatternLayout 
log4j.appender.CUSTOM_DEBUG.Append = true 

次に、CustomDebugというカスタムメディエーターを作成します。内部mediate()メソッドはMessageContextからパラメータを読み取ります。次に、何らかの処理(ある場合)を行い、最後にlog.debug()を使用してログメッセージを書き込みます。このデバッグメッセージには、上で作成した新しいファイルが書き込まれます(この場合は/home/upul/log/moredebug.logになります)。

public class CustomDebug extends AbstractMediator { 

    private static final Log log = LogFactory.getLog(CustomDebug.class); 

    public boolean mediate(MessageContext mc) { 

    } 
} 

次に、あなたのシーケンステンプレートの適切な場所にCustomDebugクラスメディエーターを挿入し、引数としてuidを渡します。

これまで説明したように、カスタムロギングの作成に使用できる方法の1つです。あなたは他の可能性も見なければならないかもしれません。

この問題に関してさらに助けが必要な場合は、お知らせください。

おかげで、迅速な答えを

Upul

+0

おかげUpul!すべての呼び出しでMessageContextが変更されるのではないでしょうか?この場合、シーケンスの中にたくさんの呼び出しがあるので、それぞれが異なるuidを持つので、シーケンス全体をトレースすることはできません。私は正しい? – Sibby

+0

@Sibbyはいすべての呼び出しでMessageContextが変更されますが、uidをCustomDebugメディエータに渡すとuid +その他の詳細が記録されます。 (私は私の答えを更新してくださいそれを見てください) –

+0

ありがとう。私はそれを試してみよう – Sibby

関連する問題