Подтвердить что ты не робот

Глобальная обработка исключений в Web API 2.1 и NLog

В Web API 2.1 новая Глобальная обработка ошибок. Я нашел пример, как записывать исключения в Elmah (образец elmah). Но я использую NLog для регистрации ошибок в таблице базы данных. Можно ли использовать глобальную обработку ошибок Web API с помощью NLog? Просьба привести несколько примеров.

4b9b3361

Ответ 1

На самом деле это довольно просто: вы либо реализуете IExceptionLogger вручную, либо наследуете от базового класса ExceptionLogger.

public class NLogExceptionLogger : ExceptionLogger
{
    private static readonly Logger Nlog = LogManager.GetCurrentClassLogger();
    public override void Log(ExceptionLoggerContext context)
    {
        Nlog.LogException(LogLevel.Error, RequestToString(context.Request), context.Exception);
    }

    private static string RequestToString(HttpRequestMessage request)
    {
        var message = new StringBuilder();
        if (request.Method != null)
            message.Append(request.Method);

        if (request.RequestUri != null)
            message.Append(" ").Append(request.RequestUri);

        return message.ToString();
    }
}

Также добавьте его в конфигурацию:

var config = new HttpConfiguration(); 

config.Services.Add(typeof(IExceptionLogger), new NLogExceptionLogger()); 

Здесь вы можете найти полное тестовое решение .

Ответ 2

Другое, что может быть удобно WebApiContrib.Tracing.NLog, который позволяет вам использовать интерфейс ITraceWriter для вывода в журналы с NLog. Замечательная вещь в ITraceWriter заключается в том, что "все трассировки могут коррелировать с единственным запросом, вызвавшим запуск этого кода (см. эта ссылка)