azure logging exception-handling owin middleware

azure - Cómo registrar correctamente cada excepción usando OWIN



logging exception-handling (1)

mi pregunta debería ser bastante simple, pero desafortunadamente no tuve suerte en resolverla.

Básicamente, tengo algunos controladores de API web alojados en OWIN e implementados en Azure.

Realmente necesito rastrear las excepciones que ocurren en cada middleware (por ejemplo, OAuthAuthorizationServerProvider o SignalR Persistent Connections ), pero definitivamente no tengo ni idea de cómo lograrlo.

  • Intenté con Elmah, pero no parece funcionar correctamente con OWIN debido a la falta de HttpContext .
  • Intenté usar log4net, pero solo puedo registrar las excepciones generadas por los Controladores de API web utilizando un ExceptionFilterAttribute personalizado ... los demás se ignoran.
  • Intenté definir un LoggerFactory personalizado y asignarlo en Inicio, usando app.SetLoggerFactory(new MyLoggerFactory()) , pero no se registran las excepciones lanzadas por otros middlewares.
  • Traté de obtener al menos un mensaje de error significativo enviado al cliente, pero a pesar de <customErrors mode="Off"/> y <deployment retail="false"/> , Azure se niega a devolver nada excepto {"message":"an error has occurred"} . Probé los sitios web de Azure y los servicios en la nube de Azure.
  • Vi algunas alternativas en la nube que deberían funcionar con OWIN, como Elmah.io o Raygun.io, pero no necesito sus funciones en la nube y definitivamente no vale la pena pagar cientos de dólares al año solo por registrar algunas excepciones.

¿Cuál debería ser la mejor manera de registrar cualquier posible excepción lanzada por mi aplicación?

Gracias por tu ayuda


¿Has echado un vistazo a este enlace? http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

Debido a que no puede detectar todas las excepciones con un excepciónFilter, proponen usar un IExceptionLogger y IExceptionHandler para permitir el manejo global de errores en Web Api 2.

Después de eso, si no se ajusta a sus necesidades, puede construir un OwinMiddleWare que colocará en la primera posición (antes de la etapa de autenticación), este middleware podría:

  1. crear un requestId en el encabezado de la respuesta
  2. analice el código de respuesta, antes de enviar la respuesta, y si no es un IsSuccessStatusCode, puede registrar el mensaje de excepción en una base de datos y reemplazar el contenido de la respuesta para enviar un mensaje de error simple al cliente utilizando el ID de solicitud (para permitirle encontrar la excepción relacionada en su db)

espero que esto ayude