处理C#异常时要保存在数据库中的字段

时间:2012-03-25 08:30:34

标签: c# exception-handling

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

我有一些问题..

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

2 个答案:

答案 0 :(得分:4)

  

我应该在数据库中保存哪个字段? (消息,追踪等)

如果可能的话,你可以做的一切:

  • 类型
  • 消息
  • 堆栈跟踪
  

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

有些人会有多个嵌套的。你应该尽可能地保存一切,IMO。你如何构建由你决定的,但是你总是可以添加最里面的那个,然后用最后一个的外键添加,等等,向外工作。

  

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

我担心,无法帮助你。您可能想要考虑异步执行此操作,将它们排队。当异常本身可能是数据库错误时,这尤其相关 - 如果您可以构建一个队列(当然具有最大大小),以便在恢复任何数据库问题后,错误可以然后存储,这可能是有用的。或者可能首先将它们转储到磁盘上,并定期将该日志上传到数据库。

答案 1 :(得分:1)

  1. 正如Jon Skeet所说,你保存的字段越多,你就越需要诊断出问题的数据。就个人而言,如果你有能力这样做(数据库空间和性能考虑),我会去序列化异常并将它放在“XML”类型列中。这也将消除第二个问题,因为内部异常也将被序列化。虽然使用这种方法,但所有自定义异常都应该能够正确序列化。
  2. 我建议查看免费的错误记录器源代码,例如Elmah,以获得基本想法。