【问题标题】:nHibernate SQL logging + stack trace togethernHibernate SQL 日志记录 + 堆栈跟踪一起
【发布时间】:2012-07-10 20:47:55
【问题描述】:

我遇到了一个问题,即我们的生产数据库中偶尔会丢失记录。这是一个带有 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>

也许我只需要分别记录这两件事并自己比较时间?我只是在寻找建议。

谢谢!

【问题讨论】:

    标签: sql asp.net-mvc nhibernate log4net missing-data


    【解决方案1】:

    您可以使用stacktracestacktracedetail conversion patterns

    堆栈跟踪

    用于输出记录事件的堆栈跟踪堆栈跟踪 级别说明符可以括在大括号之间。例如, %stacktrace{级别}。如果没有给出堆栈跟踪级别说明符,则为 1 假设。 输出使用格式:type3.MethodCall3 > type2.MethodCall2 > type1.MethodCall1。 此模式不适用于 Compact Framework 程序集。

    堆栈跟踪详细信息

    用于输出记录事件的堆栈跟踪堆栈跟踪 级别说明符可以括在大括号之间。例如, %stacktracedetail{级别}。如果没有给出堆栈跟踪级别说明符 然后假设为 1。输出使用格式:type3.MethodCall3(type 参数,...)> type2.MethodCall2(类型参数,...)> type1.MethodCall1(类型参数,...)。此模式不适用于 Compact Framework 程序集。

    你可以这样使用它:

    <conversionPattern value="%d %p %m%n%stacktrace" />
    

    编辑:

    关于 log4net 堆栈跟踪的几个 SO 问题:
    How do you add a StackTrace to every log call in log4net?
    How to log stack trace using log4net (C#)
    Does log4net support including the call stack in a log message

    【讨论】:

    • 哇。非常感谢!我现在只是在尝试。目前,我实际上在我的日志中看到了“stacktrace”这个词。不过,这似乎是正确的答案……
    • 嗯.. 我不确定我错过了什么。当它来自 nHibernate.SQL 时,也许 log5net 无法获取 %stacktrace?
    • 添加了一些可能有帮助的链接。我不确定 stacktrace 是否适用于非异常日志。
    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2014-11-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多