我遇到了一个问题,即我们的生产数据库中偶尔会丢失记录。这是一个带有 nHibernate 的 .NET MVC 2 应用程序。在过去的几年里,几位开发人员一直在研究它,所以我们假设某个地方的映射设置不正确,并且 nHibernate 认为它应该删除这些记录。
我使用 log4net 从我们的管理员和前端(在单独的文件中)记录 nHibernate 生成的所有 SQL。奇怪的是,我们网站的前端似乎偶尔会为当时丢失的记录生成删除。这很奇怪,因为尽管前端和后端共享相同的数据模型,但前端不应该有任何写入/更新功能。我们确信这是所有 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>
也许我只需要分别记录这两件事并自己比较时间?我只是在寻找建议。
谢谢!