我是 ELMAH 错误记录的新手。我尝试了不同的选择,但没有奏效。以下是我的解决方案项目结构。我正在使用 ELMAH.MVC 块包。
xyz.sol
xyz.web (mvc project)
xyz.Service (class librarry)
xyz.Data (DAL)
xyz.Model (model classes)
我已经在 xyz.web (MVC 项目)中设置了 ELMAH,它适用于基本测试,即。404 错误。我可以看到记录的错误,也可以在 url www.project-name.com/ELmah 中看到
但是,我也想在所有其他类库(服务和数据)中使用 ELMAH。当服务层出现故障时,该错误永远不会记录在 ElMAH 中。我的印象是 ELMAH.mvc nuget 包日志本身所有已处理和未处理的异常。看来我可能缺少配置,或者我可能也必须在类库项目中配置 ELMAH。
请指教。
谢谢
遵循我的全局句柄错误过滤器。它到达 OnException 但从未到达 LogException 方法,因为“RaiseErrorSignal”方法总是返回 true。你能告诉我我做错了什么吗?
<code>
public class ElmahHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
private static ErrorFilterConfiguration _config;
public override void OnException(ExceptionContext context)
{
base.OnException(context);
if (!context.ExceptionHandled) // if unhandled, will be logged anyhow
return;
var e = context.Exception;
var httpContext = context.HttpContext.ApplicationInstance.Context;
if (httpContext != null &&
(RaiseErrorSignal(e, httpContext) // prefer signaling, if possible
|| IsFiltered(e, httpContext))) // filtered?
return;
LogException(e, httpContext);
}
private static bool RaiseErrorSignal(Exception e, HttpContext context)
{
var signal = ErrorSignal.FromContext(context);
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}
private static bool IsFiltered(Exception e, HttpContext context)
{
if (_config == null)
{
_config = context.GetSection("elmah/errorFilter")
as ErrorFilterConfiguration
?? new ErrorFilterConfiguration();
}
var testContext = new ErrorFilterModule.AssertionHelperContext(e, context);
return _config.Assertion.Test(testContext);
}
private static void LogException(Exception e, HttpContext context)
{
ErrorLog.GetDefault(context).Log(new Error(e, context));
}
}
</code>