2

我是 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>
4

0 回答 0