现有.NET Web应用程序中的被动日志记录?

时间:2009-07-14 18:50:27

标签: .net asp.net logging aop

我刚刚开始研究一个棕色的ASP.NET 2.0 Web应用程序。与许多棕地应用程序一样,体系结构,特别是异常日志记录体系结构,是不一致的,在某些地方,丢失或不正确(吞咽异常,重新抛出,将它们用于控制逻辑等)

作为将所有这一切都置于控制之下的起点,我想在应用程序中抛出所有异常,然后将其记录在像DB表这样的地方。不幸的是,明确代码进入应用程序将是很多天,可能是几周的工作,因此规则出手编码事物(例如,将logger.log(ex)放在任何地方)以及诸如log4net和nlog之类的东西。我正在寻找另一种更轻量级的解决方案。

在这里快速阅读之后,我遇到了各种各样的技巧,如:

  • 面向方面编程,例如
    • 基于属性的
    • 发布夏普图书馆
    • Microsoft Unity
    • Castle Unity
  • 网络处理程序
    • ELMAH
    • 其他?

人们对这些解决方案的体验是什么?请记住,我希望尽可能简单而无痛地实现这一点,因此在这个阶段不需要花里胡哨。我只需要将每个异常报告给一个位置,这样我就可以开始在逻辑中找到漏洞了。

编辑:

我应该说清楚我想记录****所有****异常(甚至是那些被处理的异常,因为有些处理不正确)。是否可以配置Elmah来执行此操作?如果没有,我的其他选择是什么?

3 个答案:

答案 0 :(得分:5)

我完全建议elmah插入您的应用程序。它让人大开眼界,找出出错的地方。我的应用程序中有几个未报告的超时,例如我已经识别并修复了。

简单而无痛。除了web.config的一些额外行之外,它不会对代码进行任何更改。您可以添加它并在10分钟内查看异常。

答案 1 :(得分:3)

不要添加任何捕获量。启用ASP.NET Health Monitoring。如果您愿意,可以将其配置为登录数据库。

除此之外,我将使用Enterprise Library,特别是异常应用程序块和日志记录应用程序块。在任何地方应用日志记录(可以在生产中配置它),但只捕获层边界的异常 - 就像在公共DAL方法中一样。


企业库的一个好处是,Design for Operations项目可以很好地使用它,如果这是你感兴趣的东西:

  

项目专注于开发工具   和指导,以帮助实现   发展高度可管理   Windows平台上的应用程序。

     

这个项目创造了两个   交付。首先是视觉   Studio Team系统管理模型   Designer Power Tool(TSMMD)。 TSMMD是   用于建模业务线的工具   健康情景和相关的   仪器仪表。该工具包括   生成的指导包   平台仪器(称为   仪表助手)和   验证者确认该申请   源代码包含检测   在健康模型中定义。工具   然后可以用来生成   System Center的管理包   Operations Manager 2007.最后是   包含的管理指南   关于建筑的说明性指导   高度可管理的应用程序   Microsoft Windows平台。

答案 2 :(得分:1)

考虑使用面向方面的框架将日志代码注入源预编译时。日志记录是AOP的教科书应用程序,因此大多数软件包应该能够满足您的要求。

这是一个很好的AOP库列表。 http://www.bodden.de/tools/aop-dot-net/

大约4年前,我在.NET中玩AOP,看起来这些库已经成熟了。