Пользовательский регистратор Elmah не работает

Я хочу иметь одну глобальную точку для обработки всех исключений в приложении asp.mvc3. Я создал новое приложение, добавил elmah с помощью nuget и реализовал класс ElmahCustomLogger. Я также зарегистрировал этот пользовательский регистратор в разделе web.config elmah.

По какой-то причине метод ElmahCustomLogger::Log никогда не вызывается (я ставлю там точку останова)

public class ElmahCustomLogger : ErrorLog 
{
    public override string Log(Error error)
    {
        throw new NotImplementedException();
    }

    public override ErrorLogEntry GetError(string id)
    {
        throw new NotImplementedException();
    }

    public override int GetErrors(int pageIndex, int pageSize, IList errorEntryList)
    {
        throw new NotImplementedException();
    }
}

person IlliakaillI    schedule 15.02.2013    source источник


Ответы (2)


Похоже, мне просто нужно объявить конкретный конструктор, чтобы он работал:

public class ElmahCustomLogger : Elmah.ErrorLog
{
    public ElmahCustomLogger(IDictionary config) {}
    ...
}
person IlliakaillI    schedule 06.03.2013

На основе этого публикации

Вот мое решение:

namespace CompanyName.Models.Platform.Exceptions
{
    /// <summary>
    /// Custom SQL Elmah logger with more details from the Exception.Data Collection
    /// </summary>
    public class EnhancedSqlErrorLog : SqlErrorLog
    {
        public EnhancedSqlErrorLog(IDictionary config) : base(config)
        {
            // Must define for Elmah to work
        }

        public EnhancedSqlErrorLog(string connectString) : base(connectString)
        {
            // Must define for Elmah to work
        }

        public override string Log(Error error)
        {
            // If there is data on the exception, log it
            if (error.Exception.Data != null && error.Exception.Data.Keys.Count > 0)
            {
                var sb = new StringBuilder();

                foreach (var key in error.Exception.Data.Keys)
                {
                    sb.AppendLine(key + " - " + error.Exception.Data[key]);
                }

                // Be sure to append to whatever is already there
                error.Detail += sb.ToString();
            }

            return base.Log(error);
        }
    }
}

Затем в вашем web.config укажите Elmah для использования нового регистратора.

<errorLog type="CompanyName.Models.Platform.Exceptions.EnhancedSqlErrorLog, YourDllName" connectionString="Data Source=.;Initial Catalog=YourDatabase;Integrated Security=True;MultipleActiveResultSets=True;" />
person ProVega    schedule 10.10.2013