【问题标题】:Passive Logging in an existing .NET Web Application? [closed]现有 .NET Web 应用程序中的被动日志记录? [关闭]
【发布时间】:2026-02-11 02:50:01
【问题描述】:

我刚刚开始开发一个棕地 ASP.NET 2.0 Web 应用程序。与许多棕地应用程序一样,架构,特别是异常日志架构,不一致,并且在某些地方丢失或不正确(吞下异常、重新抛出、将它们用于控制逻辑等)

作为控制所有这一切的起点,我想笼统地捕获应用程序中抛出的所有异常,并将其记录在数据库表之类的某个地方。不幸的是,要在应用程序中显式编写代码需要很多天甚至几周的工作,因此排除了手动编码的东西(例如,将 logger.log(ex) 放在任何地方)以及 log4net 和 nlog 之类的东西。我正在寻找另一种更轻量级的解决方案。

在这里快速阅读后,我遇到了各种技术,例如:

  • 面向方面的编程,例如
    • 基于属性
    • Post Sharp 库
    • 微软 Unity
    • 统一城堡
  • Web 处理程序
    • ELMAH
    • 其他?

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

编辑:

我可能应该明确表示我想记录 ****ALL**** 异常(即使是已处理的异常,因为有些处理不正确)。是否可以配置 Elmah 来执行此操作?如果没有,我还有哪些其他选择?

【问题讨论】:

  • ELMAH 是要走的路,我最近将它硬塞进了一个 2 岁的硬壳 asp.net 2.o 应用程序,除了将 dll 放入 bin 和一些 web 之外,没有任何问题,也没有代码更改。配置
  • +1 让我在找到“棕地应用程序”的定义之前访问了两个不同的 wiki 站点。我需要更好地跟上术语......
  • 哈哈对不起,我把措辞改得更清楚一点
  • 有人对我的编辑有任何想法吗? “我可能应该明确表示我想记录 ALL 异常(即使是已处理的异常,因为有些处理不正确)。是否可以配置 Elmah 来执行此操作?如果没有,怎么办我还有其他选择吗?”

标签: .net asp.net logging aop


【解决方案1】:

我强烈推荐将 elmah 插入到您的应用程序中。找出哪里出了问题,这让我大开眼界。我的应用程序中有几个未报告的超时,例如,我已经确定并修复了这些超时。

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

【讨论】:

  • 约翰,我很好奇。 elmah 有没有做 ASP.NET 健康监控没有做的事情?
  • 嗨,约翰。 Phil Haack 比较了这两个 haacked.com/archive/2007/07/24/…,因为我不是健康监测专家。
【解决方案2】:

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

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


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

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

这个项目创建了两个 可交付成果。首先是视觉 工作室团队系统管理模型 设计师电动工具 (TSMMD)。 TSMMD 是 用于建模业务线的工具 健康情景和相关的 仪器仪表。该工具包括 生成的指导包 平台仪表(称为 仪表助手)和 验证者确认该应用程序 源代码包含仪器 在健康模型中定义。工具 然后可以用来生成 System Center 管理包 Operations Manager 2007。最后是 管理指南包含 建筑规范性指导 高度可管理的应用程序 Microsoft Windows 平台。

【讨论】:

    【解决方案3】:

    考虑使用面向方面的框架将日志代码注入源代码预编译时间。日志是 AOP 的教科书式应用,所以大多数包应该都能满足你的要求。

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

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

    【讨论】: