Ведение журнала глобальных исключений WebAPI (OWIN) с помощью CreateErrorResponse

Можно ли каким-либо образом захватить обработанные исключения, когда CreateErrorResponse() используется для возврата ответа об ошибке с помощью методов API? В настоящее время я зарегистрировал простой глобальный регистратор исключений для любых исключений, однако для некоторых ответов API, включая атрибут Model Filter, я CreateErrorResponse() для возврата ответов об ошибках, но это не для входа в метод Log() в Global Exception Logger . Пример использования CreateErrorResponse в методе API:

return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);

Глобальный регистратор исключений:

public class GlobalExceptionLogger : ExceptionLogger
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public override void Log(ExceptionLoggerContext context)
        {
            log.Error(context.Exception);
        }
    }

Единственный способ вызвать метод Log() — это вместо использования CreateErrorResponse создать исключение. Это правильно?


person Rubans    schedule 19.01.2018    source источник


Ответы (1)


Вы должны зарегистрировать ошибку и любую информацию о трассировке в том же отрицательном потоке, в котором вы создаете и возвращаете ответ об ошибке.

Использование исключений для управления потоком приложений — плохая практика, избегайте этого.

Глобальные обработчики используются для обработки всего, что вы еще не обработали, и должны быть для очень исключительных случаев, вы также регистрируетесь там и предоставляете пользователю общее сообщение об ошибке, пока вы разбираете хаос сзади конечно :)

Если я неправильно понял ваш вопрос, пожалуйста, поправьте меня.

person MarkovskI    schedule 19.01.2018