3

ログを通じて、NServiceBus による NHibernate の使用状況を公開できるようにしたいと考えています。特に、トランザクションがいつコミットまたはロールバックされるかを確認したいと思います。

現在、Sagas の 1 つで、DB のロックが原因でロールバック プロセスが失敗しているように見える問題を調査しています。ロールバックまたはコミットを試みているかどうか、いつ試みているか、およびこれが成功したかどうかを確認したいと思います。

現在、Log4Net を使用して NServiceBus と NHibernate のアクティビティを個別にログに記録していますが、Saga トランザクション (コミット/ロールバック) に関するログ情報は取得していません。

よろしくお願いします。

4

1 に答える 1

1

すでに Log4Net を使用して NHibernate のアクティビティをログに記録している場合は、特定の NHibernate クラスをログから除外するように構成がセットアップされていない限り、トランザクション ベースの NHibernate のログ情報を既に表示できるはずです。

NHibernate ログ メッセージをログに記録するように Log4Net を構成する方法については、次の記事を参照してください。これが完了すると、すべてのログ データを表示できるようになります。

NHibernate で使用するために Log4Net を構成する

Log4Net 構成に次のノードを追加することで、Log4Net ロガーを明示的にセットアップして、トランザクション ログ メッセージをキャプチャすることもできます。

<logger name="NHibernate.Transaction.AdoTransaction">
  <level value="DEBUG" />
</logger>

それがうまくいかない場合は、もう少し深く掘り下げることができます。開始するために考慮すべき事項を次に示します。

NServiceBus で Sagas を使用したことはありませんが、少し調べてみると、次のように結論付けることができます。

NServiceBus は、永続的な Sagas を処理するために独自の NHibernate 構成を内部的に作成します。その NHibernate 構成インスタンスの構成は、.config ファイルで行われます。次のページの Sagas の見出しの下を見て、構成がどのように見えるかを確認してください。

http://docs.particular.net/nservicebus/nhibernate/

それを見ると、必要なものを取得できる新しいキーを追加できるはずです。

基本的に、保存/更新/トランザクションなどの特定のアクションがNHibernateによって実行されようとしているときに呼び出されるクラスである構成にインターセプターまたはイベントリスナーを追加する可能性があります。必要に応じて、NHibernate インターセプターおよび/またはイベント リスナーを Google で検索して、それらの機能と使用方法について全体的なスクープを取得するか、次の NHibernate のドキュメントにアクセスしてください: http://nhibernate.info/doc/nh/en/ index.html#objectstate-events

于 2012-08-03T16:08:35.400 に答える