【问题标题】:Where to store web service exceptions?在哪里存储 Web 服务异常?
【发布时间】:2011-02-20 12:02:51
【问题描述】:

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

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

【问题讨论】:

  • 对于 ASP.Net,一旦您知道Elmah,您将不再寻找其他任何东西。也可以在一些帮助下使用 Web API。

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


【解决方案1】:

您有 3 个选项:

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

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

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

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

关键是冗余,这取决于日志记录对您和您的应用程序的重要性。如果您走数据库路线,请进行备份。如果您走文件路线,请进行备份。在大多数情况下,特定情况下的日志记录可能会失败,因此使用不止一种方法来存储您需要的信息非常重要。当其中一种记录方法由于某种原因失败时,它为我节省了大量时间来解决问题。

【讨论】:

  • 感谢 Kelsey,但将其存储在日志文件中是否线程安全?系统事件日志对我来说不是一个选项,因为 Web 服务是远程服务器上的主机,我无权访问该服务器。
  • 感谢您的帮助 Kelsey,我喜欢“有不止一种方法来存储信息”但重新整理日志文件的想法;请问一个问题,我可以使用这个简单的语句( File.AppendAllText(@"logfilepath", exceptionMessage);)我的意思是可能不止一个异常发生在同一个时间里,那么日志文件中会存储什么?
  • @ICoder 这不是线程安全的。有一些实用程序可以使写入日志文件成为线程安全的。看看log4net。使用简单的配置,您可以登录到数据库、Web 服务、事件日志、日志文件等。
【解决方案2】:

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

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

【讨论】:

  • 如果你有一个控制它的类,是的。我会检查 Log4net
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多