存储Web服务异常的位置?

时间:2010-05-17 16:17:31

标签: c# web-services exception logging exception-handling

我正在构建一个Web服务(使用c#),这个Web服务将使用MS SQL Server数据库。现在,我正在尝试为此Web服务构建一个(例外日志系统)。简单地说,我想在Web服务上保存每个例外以供将来使用(错误跟踪)。

保存这些例外的最佳位置在哪里?将它保存在数据库中是个好主意吗?如果异常与数据库本身连接怎么办?

2 个答案:

答案 0 :(得分:6)

您有3个选项:

  1. 日志文件 - 我实际上更喜欢使用的好选项,因为我可以轻松处理条目并查看它。我甚至使用以下格式的AppName \ YYYY \ MM \ DD \ yourfile.log为日志文件创建目录,以便我可以看到特定日期的内容(在某些情况下需要多年的日志记录)。线程不是问题。你可以使它线程安全。这是一种非常安全的方法,因为除非您的磁盘已满,否则您几乎总是可以访问写入磁盘,其他选项应该能够处理。

  2. 数据库 - 也很好,因为您可以轻松查询。它有很大的失败几率,在我看来不应该用于主要的日志记录。如果DB发生故障,则会遇到导致异常的问题,您将在哪里存储它?您的数据库可能会滞后并导致超时等。它还会影响您的数据库性能,具体取决于您的日志记录。

  3. 系统事件日志 - 1或2或两者都很好。事件日志几乎总是可用的,这是Windows使用的(假设是Windows服务器),因此非常安全。您还可以制作应用程序特定的例外,以便过滤掉您不想担心的所有Windows特定内容。但它只会存储一个特定的金额,因此您的历史记录可能很短,具体取决于投放的数量,因此您可能希望按计划导出这些数据。

  4. 我的大多数应用都使用了1和2的组合。我们推出了自己的日志记录,它对我们来说效果很好,但是有一些很棒的库可以帮助我们。我们还有一个内部构建工具来监视我们的特定项目的服务器事件日志,并在可能的情况下根据特定条件通知正确的人员。它被设置为来自另一个服务器的拉入过程,因此即使服务器出现可能无法发送通知的问题,监控服务器也应该能够最终获取数据并执行正确的通知。

    根据记录对您和您的应用程序的重要程度,密钥是冗余。如果你去DB路由,请备份。如果你去文件路由,请备份。在大多数情况下,日志记录在特定情况下可能会失败,因此有多种方法来存储您需要的信息非常重要。当其中一种记录方法因任何原因失败时,它为我节省了大量的时间。

答案 1 :(得分:2)

我总是尝试将其存储到日志文件中。有些人喜欢将它存储到数据库中,但我发现使用正则表达式等查找文本文件更容易。

就像你说的那样,如果db存在问题怎么办?如果无法连接,则无法记录问题。最好的方法可能是将其记录到两个不同的地方。尝试使用数据库(或日志文件),如果不起作用,请将其记录到事件查看器中。