C# NET中的异常处理和日志记录策略

C# NET中的异常处理和日志记录策略,c#,.net,asp.net,exception-handling,asp.net-mvc-3,C#,.net,Asp.net,Exception Handling,Asp.net Mvc 3,我正在构建一个具有ASP.NET MVC web应用程序的多层应用程序。它包括表示层、业务层、数据层等常见的层。如何创建/使用一个合适的异常处理机制?我读过一些关于模式和实践的文章,你需要在不同的层中产生异常 还有日志记录。伐木在哪里发生?在MVC web应用程序中 如何根据错误类型重定向到各种错误页面 如果你们有一些关于这方面的反馈,以及一些文章,我将不胜感激。如果有任何示例应用程序使用了适当的异常隐藏和日志记录策略,请让我知道:)我将使用封装在自定义日志记录程序业务类中的Log4Net,因此

我正在构建一个具有ASP.NET MVC web应用程序的多层应用程序。它包括表示层、业务层、数据层等常见的层。如何创建/使用一个合适的异常处理机制?我读过一些关于模式和实践的文章,你需要在不同的层中产生异常

还有日志记录。伐木在哪里发生?在MVC web应用程序中

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


如果你们有一些关于这方面的反馈,以及一些文章,我将不胜感激。如果有任何示例应用程序使用了适当的异常隐藏和日志记录策略,请让我知道:)

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


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

在我的MVC3应用程序中,我使用ELMAH进行异常处理,如下所述,如果需要记录自定义消息,则使用System.Diagnostics提供的跟踪方法,这里有一个有用的链接

更新
现在,您可以直接使用NuGet packager在应用程序中设置elmah

看一看。它将为您提供非常灵活的测井工具和其他我认为您会喜欢的产品。例如:您可以使用Police Injection应用程序块(taht实现AOP)捕获代码中的所有异常,而无需编写一行代码。

首先,我建议您阅读作者的文章“”。这将为您提供一些关于异常处理的合理指导(以及更多关于异常抛出的指导)

当涉及到异常日志记录时,最简单、最干净的方法是让一个“顶级”异常处理程序负责处理所有其他未处理的异常,并将它们记录到日志中进行分析。这可以通过事件在ASP.NET应用程序中完成,您可以通过Global.asax文件将事件挂接到该事件中


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

大多数.NET日志框架都有一些内置功能来支持ASP.NET(或者应该支持);因为这是最重要的。没有太多的配置,将该软件包安装到Serilog应用程序将导致记录ASP.NET错误&c


(我在Serilog上工作,刚刚写了一篇文章。)

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