【发布时间】:2010-11-20 11:14:25
【问题描述】:
如何让异常处理应用程序块 (EHAB) 将 Exception.Data 属性中的值写入日志中?
try
{
// ...
}
catch (Exception ex)
{
ex.Data.Add("Hello", "World");
throw ex;
}
异常已正确记录,但我在 EHAB 创建的日志条目中的任何地方都找不到添加的数据。
据我了解,推荐的做法是向异常本身添加额外的相关信息,如上例所示。这就是为什么我有点惊讶 EHAB 默认不包含这个。
我可以通过使用 EntLib 文本格式化程序模板编辑器修改模板来解决这个问题吗(下面的屏幕截图)?我找不到有关提供的各种“令牌”的任何信息,但我认为答案隐藏在它们的某个地方。
Text Formatter Template Editor http://img195.imageshack.us/img195/6614/capturegmg.png
或者我真的需要实现我自己的自定义文本格式化程序来完成这个吗?
编辑/更新:
我在 Global.asax.cs 中这样做是为了避免在我的代码中到处添加 HandleException 方法调用:
using EntLib = Microsoft.Practices.EnterpriseLibrary;
using System;
namespace MyApp
{
public class Global : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
// I have an "All Exceptions" policy in place...
EntLib.ExceptionHandling.ExceptionPolicy.HandleException(Server.GetLastError(), "All Exceptions");
// I believe it's the GetLastError that's somehow returning a "lessor" exception
}
}
}
事实证明这与 不 相同(效果很好,并且基本上解决了我的问题):
try
{
// ...
}
catch (Exception ex)
{
ex.Data.Add("Hello", "World");
bool rethrow = ExceptionPolicy.HandleException(ex, "Log Only Policy");
throw ex;
}
浏览所有代码并添加带有 HandleException 调用的 try-catch 似乎......好吧,愚蠢。 我想我的问题真的是如何正确使用 EHAB,而不是配置。
关于如何正确在 ASP.NET Web 应用程序的“全局级别”上记录所有异常的任何建议??
【问题讨论】:
-
我同意 HandleException:作为一个框架,“if rethrow”构造并没有真正提供很多抽象;您仍然需要在每个 catch 块中添加“if rethrow”代码。
标签: c# .net logging exception-handling enterprise-library