【问题标题】:Fields to save in database when Handling C# Exceptions处理 C# 异常时要保存在数据库中的字段
【发布时间】:2012-03-25 08:30:33
【问题描述】:

我将在测试阶段为客户处理一个项目,该项目使用 ASP.NET MVC3 构建。我需要将所有发生的异常保存到持久位置 -SQL 数据库 -

我有一些问题..

  1. 我应该在数据库中保存什么字段? (消息、跟踪等)
  2. 我见过人们保存内部异常,但有时我的异常有 null 内部异常。
  3. 处理错误并保存到数据库的最佳位置是什么。 (在 global.asax 中或在 web.config 中定义自定义错误页面并使用 server.getLastError 获取最后一个错误)

【问题讨论】:

    标签: c# exception-handling


    【解决方案1】:

    我应该在数据库中保存什么字段? (消息、跟踪等)

    如果可能,尽你所能:

    • 类型
    • 留言
    • 堆栈跟踪

    我见过人们保存内部异常,但有时我的异常有 null 内部异常。

    而且有些会有不止一个,嵌套的。 IMO,您应该保存所有可能的东西。如何构建取决于您自己,但您始终可以添加最里面的一个,然后将包含一个外键的包含一个外键添加到最里面的那个,等等,向外工作。

    处理错误并保存到数据库的最佳位置是什么。

    恐怕在这方面帮不了你。不过,您可能需要考虑异步执行此操作,将它们排队。当异常本身可能是数据库错误时,这一点尤其重要 - 如果您可以建立一个队列(当然具有最大大小),以便一旦恢复任何数据库问题,错误就可以然后 存储起来,这可能很有用。或者可能先将它们转储到磁盘,然后定期将该日志上传到数据库。

    【讨论】:

      【解决方案2】:
      1. 正如 Jon Skeet 所说,您保存的字段越多,您诊断问题所需的数据就越多。就个人而言,如果您有能力这样做(数据库空间和性能考虑),我会去序列化异常并将其放入“XML”类型列中。这也将消除第二个问题,因为内部异常也将被序列化。尽管使用这种方法,您的所有自定义异常都应该能够正确地序列化自己。
      2. 我建议您查看免费提供的错误记录器源代码,例如 Elmah,以了解基本概念。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 2017-01-30
        • 2010-09-28
        • 2016-02-13
        • 2017-03-02
        相关资源
        最近更新 更多