実稼働データベースからレコードが時折失われるという問題があります。これは、nHibernate を使用した .NET MVC 2 アプリです。過去数年間、何人かの開発者が取り組んできたので、どこかでマッピングが正しく設定されておらず、nHibernate がこれらのレコードを削除する必要があると考えています。
log4net を使用して、管理者とフロントエンドの両方から nHibernate によって生成されたすべての SQL を (別のファイルに) ログに記録しました。奇妙なことに、私たちのサイトのフロントエンドは、その時点で欠落しているレコードに対して DELETES を生成することがあるようです。フロントエンドとバックエンドは同じデータ モデルを共有していますが、フロントエンドには書き込み/更新機能を持たせるべきではないため、これは奇妙です。すべての CRUD がある管理者のバグであると確信していました。それでも、ログにはあります... DELETESのバッチです。
これらの SQL ステートメントがスタック内のどこから生成されているかについて、より多くの情報を入手したいと思います。すべての nHibernate トランザクションの前に何らかの方法で小さなスタック トレースを取得できれば、それは素晴らしいことです。これまでのところ、私のlog4net設定は次のようになっています:
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" value="nHibernate.txt" />
<param name="AppendToFile" value="true" />
<param name="DatePattern" value="yyyy.MM.dd" />
<layout type="log4net.Layout.PatternLayout,log4net">
<conversionPattern value="%d %p %m%n" />
</layout>
</appender>
<logger name="NHibernate.SQL" additivity="false">
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
</logger>
たぶん、2つのことを別々に記録して、自分で時間を比較する必要があるのでしょうか? 私はちょうど提案を探しています。
ありがとう!