C#.NET v3.5应用程序的日志记录/错误处理框架的最佳方法? (企业库/ log4net /?)

时间:2010-01-28 05:29:15

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

我正在研究.NET v3.5 winforms应用程序,并希望利用一些支持:

a)记录(到文件&可能是windows事件)

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

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

我所知道的事情包括:

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

感谢

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

+1 for log4net。

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

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

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

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

修改

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

答案 3 :(得分:1)

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

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