0

実稼働データベースからレコードが時折失われるという問題があります。これは、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つのことを別々に記録して、自分で時間を比較する必要があるのでしょうか? 私はちょうど提案を探しています。

ありがとう!

4

1 に答える 1