【问题标题】:Error logging in Windows ApplicationWindows 应用程序中的错误日志记录
【发布时间】:2014-10-09 23:14:26
【问题描述】:

我有一个 Windows 应用程序,我想使用 Log4Net 记录错误。

我面临的问题是 在哪里 记录这些错误。如果我登录到本地文件夹,那么日志将在客户的机器上,我们不方便访问。

所以,我们想到了 2 个选项:

  1. 在共享(网络)位置记录错误
  2. 数据库中的日志错误

在数据库中记录错误的问题是,如果连接到数据库时出现问题,那么记录显然会失败,因此我们决定在共享位置登录。

现在,有人告诉我,登录到共享位置不是一个好习惯。

当您可以记录的每个地方可能都无法访问或关闭时,您可以做些什么来确保记录?

【问题讨论】:

  • 这只是我的意见,但我的意思是你应该重新考虑你的问题。日志非常重要,但也需要成为您应用中最简单可靠的操作。我建议你拆分问题。 1) 想一个好的日志方式。 (正如你所说的“Log4Net”.. 这样做了)。 2)想一种方法从您的客户那里获取日志,例如。您可以从服务器服务调用的应用程序中的自托管 wcf 服务
  • 嗨,Rajesh,我本来想在回答时早些发表评论,但我刚回到办公桌前。为了便于阅读,我已为您的问题添加了some edits,请查看我所做的更改以确保它仍然是您要问的问题,并且您可以在以下问题中获得一些格式提示过程。祝你好运!

标签: c# logging log4net


【解决方案1】:

什么共享位置?

通常,您总是面临无法获取日志的风险,因为客户端计算机可能会失去网络连接。在这种情况下,将日志记录到共享位置、数据库、Web 服务,以及任何其他远程对您没有帮助的东西。

可能最少的摩擦专业解决方案是使用像https://raygun.io/ 这样的服务,这不是唯一有其他类似服务的服务。

如果做不到这一点,记录到数据库通常就足够了。实际上,如果您无法登录数据库,那是因为以下原因之一:

  • 连接问题。 (机器丢失网络连接或数据库服务器丢失或离线)
  • 日志记录代码中的错误

同样,在实践中,如果经过充分的测试,后者的可能性非常小,因为日志记录代码并不那么复杂。前者的可能性更大,因此您需要单独处理这种情况。如果数据库记录失败,通常最好在本地记录(本地文件/事件日志)。从客户机器上检索这些数据很困难,但在极少数情况下,您需要解决连接问题,这可以挽救生命。

在“windows 共享”中记录到“共享位置”并不常见,我认为与记录到数据库相比没有优势。数据库和共享位置都可能关闭。客户端计算机可能没有连接。在所有这些情况下,这两个选项的行为都是相同的。

在某些情况下,当网络连接恢复时,将本地保存的日志文件上传到数据库是有意义的,但通常这是一种矫枉过正的做法。

【讨论】:

    【解决方案2】:

    您想要完成的是我们称之为“尽力而为”的日志记录。这是一种相对语言无关的做法,类似于:

    try:
       if [database]
          log [database]
          done // exit the logging method, database worked.
       endif
    
       if [rsyslog] // If we got here, [database] didn't work.
          log [rsyslog]
          done // exit the logging method, rsyslog worked.
       endif
    
       if [redis] // If we got here, both [database] *and* [rsyslog] didn't work.
          log [redis]
          done // exit the logging method, redis worked.
       endif
    
    finally: // nothing worked
       panic // write anywhere it can, just open a file in the app directory if it must.
    

    这取决于您是否可以围绕您希望使用的任何日志库来实现,尽管有些人可能已经内置了该库。但是,如果事情进展不顺利,它只会开始显得支离破碎:

    • 大部分内容最终都会进入数据库
    • 数据库异常将转到 rsyslog(或任何日志服务器)
    • 使用第三个只是额外的偏执狂,注意 redis 中有关 rsyslog 存在存在挑战的消息(发布/订阅可能是理想的选择)

    .. 或者以任何对你有意义的方式去做。如果您的理想日志位置是数据库,那么只需将日志记录到数据库,同时确保在数据库无法安装时继续“尽最大努力”到达。如果所有其他方法都失败了,请写入一个文件——你不会经常这样做(或者理想情况下,需要从中捞出一些东西)——这样位​​置就不再是问题了。

    最终结果是,您所要做的就是调用您的日志记录方法,因为您知道将尽最大努力以几种定义的方式之一记录数据.如果它甚至无法打开文件,那么 - 你可能还有很多其他有趣的日志要查看:)

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多