2015-02-03 2 views
4

Как можно регистрировать все ошибки внутреннего сервера 500, возвращенные всеми действиями в Web Api 2? Как вы перехватываете ошибку, чтобы иметь возможность регистрировать трассировку стека?Журнал 500 Ошибки в WebApi 2

ответ

2

Вы можете использовать Elmah.MVC пакет NuGet.

Elmah (модули протоколирования ошибок и обработчики) является приложением для всей ошибки регистрации объекта, который полностью подключаемый. Это может быть , динамически добавленное к запущенному веб-приложению ASP.NET или даже всем веб-приложениям ASP.NET на машине, без необходимости повторной компиляции или повторного развертывания .

После ELMAH уронили в работающее веб-приложение и настроен соответствующим образом, вы получаете следующие возможности без изменения ни одной строки кода:

Logging почти всех необработанных исключений. Веб-страница удаленно просмотреть весь журнал перекодированных исключений. Веб-страница для удаленного просмотра полной информации о любом зарегистрированном исключении, включая цветной стек следов. Во многих случаях вы можете просмотреть исходный желтый экран смерти, сгенерированный ASP.NET для данного исключения, даже с отключенным режимом customErrors . Уведомление по электронной почте о каждой ошибке по адресу . RSS-фид последних 15 ошибок из журнала.

После регистрации Elmah в вашем Web API проекта вы можете зарегистрировать собственный фильтр в вашем веб-приложение, которое будет регистрировать все unhanded исключения из коробки.

public class UnhandledExceptionFilter : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext context) 
    { 
     //If you do not want to use Elmah, you can manually handle your ex here 
     Elmah.ErrorLog.GetDefault(HttpContext.Current).Log(new Elmah.Error(context.Exception)); 
    } 
} 

Вы можете зарегистрировать этот фильтр в своем WebApiConfig.cs файле.

config.Filters.Add(new UnhandledExceptionFilter()); 

После настройки вы можете проверить свою ошибку при просмотре /elmah пути от корневого каталога. (Ваше приложение защищено, так как этот путь будет выполняться только с размещенного компьютера по умолчанию).

enter image description here

2

Я просто хотел, чтобы держать его в простой и убедиться, что я вошел исключение.

Создание класса ExceptionFilter, как показано ниже

public class ExceptionFilter : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext actionExecutedContext) 
    { 
     // actionExcutedContext.Exception is the exception log it however you wish 
     Log.Exception(actionExecutedContext.Exception); 

     actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError, new 
                                  { 
                                   actionExecutedContext.Exception.Message 
                                  }); 
    } 
} 

Также необходимо настроить WebAPI для вызова фильтра. Это делается при создании вашей конфигурации.

config.Filters.Add(new ExceptionFilter()); 

Log.Exception линия просто вспомогательный класс для меня, вы можете зарегистрировать ее как бы вы выбрали.

Смежные вопросы