c# - 在哪里存储 Web 服务异常?

标签 c# web-services logging exception

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

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

最佳答案

您有 3 个选择:

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

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

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

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

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

关于c# - 在哪里存储 Web 服务异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850777/

相关文章:

python - Pycharm无法识别logging.basicConfig处理程序参数

c# - 具有接口(interface)类型的接口(interface)无法强制转换

C# 如何将不仅仅是 IAsyncResult 传递给 AsyncCallback?

c# - 无法使用 WSDL 定义

apache-flex - 使用 flex 进行集中式日志记录

php - Laravel Tap 格式化程序 : where do I actually format the message?

c# - 为什么在设置 MainPage 属性之前在 App.OnStart() 中等待不加载主页

c# - 如何保存游戏状态?

javax.xml.bind.UnmarshalException : unexpected element even if @XmlRootElement is added

c# - 参数 'sectionGroupName' 无效