【问题标题】:Exception handling and logging strategy in .NET.NET 中的异常处理和日志记录策略
【发布时间】:2011-07-08 18:03:08
【问题描述】:

我正在构建一个具有 ASP.NET MVC Web 应用程序的多层应用程序。它由表示层、业务层、数据层等常规组成。如何创建/使用一个体面的异常处理机制?我在 Patterns and Practices 上读到,你需要将异常冒泡到各个层。

同时记录。记录发生在哪里?在 MVC Web 应用程序中?

您将如何根据错误类型重定向到各种错误页面?

如果你们有一些关于此的反馈,以及一些文章,我将不胜感激。如果有任何示例应用程序使用了不错的异常处理和日志记录策略,请告诉我:)

【问题讨论】:

    标签: c# .net asp.net exception-handling asp.net-mvc-3


    【解决方案1】:

    我会使用包装在自定义记录器业务类中的 Log4Net,因此从代码中的任何地方,没人知道我们正在使用 Log4net,如果需要,将来可以很容易地更改日志记录框架。对于异常处理,像往常一样,如果您不处理它,则无论如何都会将其抛出记录方法名称、实际参数值等。 SO中有很多关于何时捕获,何时隐藏以及何时抛出异常的讨论......

    当然,主线程(用户界面)应该有一个未处理的异常事件处理程序,它将正确记录所有内容,而不仅仅是让应用程序崩溃。

    【讨论】:

      【解决方案2】:

      在我的 MVC3 应用程序中,我使用 ELMAH 进行异常处理,如此处所述 How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?,而如果我需要记录自定义消息,我使用来自 System.Diagnostics 的 Trace 方法,此处是一个有用的链接 Overriding System.Diagnostics.Trace.WriteLine to log to a file .

      更新 现在,您可以直接使用 NuGet 打包程序在应用程序中设置 elmah。 http://gregorsuttie.wordpress.com/2011/02/02/elmah-using-nuget-what-they-are-and-why-you-should-use-them-part-1/

      【讨论】:

      • 我正在寻找一种可在应用程序范围内使用的异常处理和日志记录解决方案。所以为你点击一下:)
      • @Brendan Vogt:为什么不能以这种方式使用?我广泛使用提出的解决方案。另一方面,我也使用异常冒泡。如果我从db 方法,我抓住了它并报告了一个新的异常,例如 BusinessLayerException。如果我误解了你的问题,我很抱歉。我喜欢分享想法:D!
      【解决方案3】:

      看看Enterprise Library。它将为您提供一个非常灵活的日志记录工具和我认为您会喜欢的其他商品。例如:您可以使用 Police Injection Application Block(taht 实现 AOP)来捕获代码中的所有异常,而无需编写任何代码。

      【讨论】:

        【解决方案4】:

        首先,我建议阅读Eric Lippert 的文章“Vexing Exceptions”。这应该会给你一些关于异常处理的合理指导(以及更多关于异常抛出的信息)。

        对于异常日志记录,最简单和最简洁的方法是让“顶级”异常处理程序负责处理所有未处理的异常并将它们记录到日志中以供分析。这可以通过 HttpApplication.Error 事件在 ASP.NET 应用程序中完成,您可以通过 Global.asax 文件挂钩该事件。

        如果应用程序的一部分正在捕获(捕获)错误并以某种方式对其进行处理,则在此时记录警告或信息可能是合适的,因此可以记录发生的问题,但系统已处理用它。尽量避免用这些填充你的代码,因为它们很快就会成为维护问题。

        【讨论】:

          【解决方案5】:

          大多数 .NET 日志框架都有一些内置功能来支持 ASP.NET(或应该);对于Serilog,它是Serilog.Extras.Web package on NuGet。无需太多配置,将包安装到您的 Serilog 应用程序中会导致记录 ASP.NET 错误 &c。

          (我在 Serilog 工作,刚刚写了一个 post about pretty much this scenario。)

          【讨论】:

            猜你喜欢
            • 2010-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-10
            • 1970-01-01
            相关资源
            最近更新 更多