【问题标题】:best approach for Logging/Error Handling framework for a C# .NET v3.5 application? (enterprise library / log4net / ?)C# .NET v3.5 应用程序的日志记录/错误处理框架的最佳方法? (企业库/log4net/?)
【发布时间】:2011-01-10 06:49:23
【问题描述】:

我正在开发一个 .NET v3.5 winforms 应用程序,并希望利用以下支持:

a) 记录(到文件和可能的 Windows 事件)

b) 错误处理/异常处理框架 - 帮助区分可以向用户显示的消息与在代码中处理和记录的消息

c) 额外的好处是如何通过服务器端 Web 服务捕获/构建严重错误给我(类似于 Firefox,当它要求您向开发人员反馈问题时) - 但是如果这会使复杂性加倍我要求放弃这个要求

我知道的事情包括:

  • log4net - 似乎很受欢迎,但不确定它是否有助于满足我的要求 b)
  • 企业库 - 我看过,但它似乎有点沉重(比如矫枉过正)

谢谢

【问题讨论】:

    标签: .net logging exception-handling error-handling enterprise-library


    【解决方案1】:

    Log4net 是我的最爱。高度可定制,易于使用。

    至于聚合日志事件报告的 Web 服务,我遇到了同样的问题,最终我自己创建了一个服务:bugcollect.com。您可以从该站点下载附加的 log4net 并亲自查看。该服务进行报告分析并将类似的报告聚合到存储桶中。您可以在提交新报告、新存储桶或新来源时设置电子邮件通知。您还可以设置对存储桶的响应,当遇到类似事件时,该响应将返回给应用程序,例如指示用户下载更新版本。该服务有一个 RESTful 接口来提交报告,但对于 .Net、Java、log4net 和 log4j,有 free client libraries 可供下载。您可以尝试使用功能有限的免费帐户,也可以输入促销代码 BETA 进行全功能试用。

    【讨论】:

      【解决方案2】:

      当然,我有偏见。但是帮自己一个忙,看看我的logging framework。它比其他一些框架更容易使用。它还附带一个示例 Windows 应用程序,可实时显示日志。还有一个用于查看日志的 Visual Studio 插件。将日志发送到 Web 服务或您想要的任何其他东西也很容易。 (例如,我有一些用于登录 Twitter 的示例代码。)

      【讨论】:

      • 它是否为我的 b) 部分要求提供任何特定支持?
      • @Greg 我认为 b 部分是非常特定于应用程序的。我的框架没有解决这个问题。您需要确定如何处理每个异常,以及显示什么/是否显示有关它的用户信息。
      【解决方案3】:

      +1 表示 log4net。

      关于 (b),我倾向于定义我自己的自定义异常(都派生自同一个基类,例如“BusinessException”),这些异常由 BLL 针对需要传达给用户的错误(输入违反业务规则)引发,用户授权失败,...)。如果将 BLL 部署为 Web 服务,则此类异常将包装在带有客户端(SOAP 1.1)/发送者(SOAP 1.2)错误代码的 SOAP 错误中。

      然后在 UI 层中,任何带有 FaultCode.IsSenderFault = true 的 BusinessException 或 FaultException 都表示应该向最终用户显示错误消息。任何其他异常都会被记录下来,并向最终用户显示一条通用消息(“发生了一些糟糕的事情”)。

      我个人认为,区分要显示给用户的消息只能通过上述特定于应用程序的方式进行。

      关于 (c),您可以编写一个自定义 log4net appender,将严重错误发送到您的 Web 服务(可能通过 MSMQ 异步)。

      编辑

      作为对评论的回应,我不知道有任何第三方框架可以做到这一点;我们使用一个非常轻量级的内部框架来做到这一点(它还有​​其他基本的东西,比如围绕 log4net 的瘦提供者模型 API,这样我们的内部代码就不会显式依赖于 log4net,我们将能够切换到不同的如果出现更好的日志框架,或者如果我们的应用程序部署到管理员更喜欢不同的网站)。

      【讨论】:

      • 谢谢 - 您对我的 Q2 的回答正是我感兴趣的类型。您所知道的是否没有很好的现有非常轻量级的框架来解决这个问题? (而不是自己滚动)
      【解决方案4】:

      我曾经同时使用这两种方法,但最终放弃了 EntLib,转而使用 log4net,因为恕我直言,它更易于使用、配置和更轻量级。
      无论如何,两个库都可以,更多的是给定项目的个人理由。

      【讨论】:

      • log4net 是否帮助您区分了您可能希望用户看到的文本与您希望在日志文件中返回给开发人员的文本?谢谢
      • 看看它的文档,logging.apache.org/log4net/release/manual/configuration.html 基本上,你可以用不同的appender和过滤日志来实现你想要的,正如官方文档中解释的那样。
      猜你喜欢
      • 1970-01-01
      • 2011-07-19
      • 2015-09-14
      • 2013-08-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多