В Web API 2.1 новая Глобальная обработка ошибок. Я нашел пример, как записывать исключения в Elmah (образец elmah). Но я использую NLog для регистрации ошибок в таблице базы данных. Можно ли использовать глобальную обработку ошибок Web API с помощью NLog? Просьба привести несколько примеров.
Глобальная обработка исключений в Web API 2.1 и NLog
Ответ 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 заключается в том, что "все трассировки могут коррелировать с единственным запросом, вызвавшим запуск этого кода (см. эта ссылка)