Как настроить ELMAH в решении asp.net

Я новичок в регистрации ошибок ELMAH. Я пробовал другой вариант, но не работал. Ниже приведена структура проекта моего решения. Я использую пакет самородков ELMAH.MVC.

xyz.sol

xyz.web (mvc project)

xyz.Service  (class librarry)

xyz.Data (DAL)

xyz.Model (model classes)

Я установил ELMAH в xyz.web (проект MVC), и он отлично работает с базовым тестированием, т.е. 404 ошибка. Я вижу, что эта ошибка зарегистрирована, а также в URL-адресе www.project-name.com/ELmah.

Но я хочу использовать ELMAH и во всех других библиотеках классов (Service & Data). Когда что-то выходит из строя на сервисном уровне, эта ошибка никогда не регистрируется в ElMAH. У меня сложилось впечатление, что пакет nuget ELMAH.mvc регистрирует все обработанные и необработанные исключения сам по себе. Кажется, что я могу отсутствовать в конфигурации или мне, возможно, придется настроить 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>

person Yash Patel    schedule 01.08.2013    source источник
comment
ELMAH и ELMAH.MVC должны были все поймать. Я бы предложил проверить код ErrorSignal.FromContext() и уточнить, почему он хочет поднять сигнал, а не ожидание журнала. Я мог бы предположить, что это можно решить путем изменения конфигурации.   -  person Alexander Beletsky    schedule 23.08.2013