1

例外が発生したときにメッセージの内容を記録する方法はありますか?

さまざまなログ拡張機能を調べましたが、CorrelationId をログに記録しているだけです。また、メッセージ内容はご利用いただけません。

MessageContext には CurrentMessge プロパティがありますが、ロガーが例外を書き込む時点では使用できません。

メッセージの内容をログに記録できる PoisonMessage イベントを処理しようとしました。

public static void OnPoisonMessage(IBus bus, ReceivedTransportMessage receivedTransportMessage, Rebus.Bus.PoisonMessageInfo poisonMessageInfo) {

var message =  new JsonMessageSerializer().Deserialize(receivedTransportMessage);
    Log.Error("{@messageType} failed {@message}", message.Messages[0].GetType(), message);
}

これはうまく機能しますが、ログに2つのエラーがあり、1つはハンドラーからのもので、もう1つはロガーからのものです。

この要件を処理するためのより良い方法があるかどうか疑問に思っています。

4

1 に答える 1

0

メッセージの内容を単純に JSON としてログに記録することが要件である場合、それを行う正しい方法を見つけたと思います。少なくとも、それが私が行った方法です。

メッセージの内容をログに記録することでどのような問題を解決しようとしているのか気になります-失敗したメッセージがエラーキューに入れられ、そこで検査できるという事実を知っていますか?

MSMQ を使用している場合は、単純な MSMQ インスペクターであるRebus の Snoop-toolを使用して、JSON でシリアル化されたメッセージを検査できます。また、メッセージを失敗した入力キューに戻すこともできます (「ソース キューに戻る」)。

Rebus のインストールを監視する良い方法は、何かがエラー キューに到着したときに何らかのアラートを設定することです。その後、メッセージを確認し (このイベントには、キャッチされた例外が特別なヘッダーに含まれています)、状況を解決することができます。そこの。

于 2014-10-15T14:05:08.813 に答える