azure - 如何使用 OWIN 正确记录每个异常

标签 azure logging exception owin middleware

我的问题应该很简单,但不幸的是我没能解决它。

基本上,我有一些由 OWIN 托管并部署在 Azure 上的 Web API Controller 。

我确实需要跟踪每个中间件中发生的异常(例如OAuthAuthorizationServerProviderSignalR持久连接),但我绝对不知道如何来实现它。

  • 我尝试了 Elmah,但由于缺少 HttpContext,它似乎无法与 OWIN 正常工作。
  • 我尝试使用 log4net,但只能使用自定义 ExceptionFilterAttribute 记录 Web API Controller 抛出的异常。其他异常将被忽略。
  • 我尝试定义一个自定义 LoggerFactory 并在启动中分配它,使用 app.SetLoggerFactory(new MyLoggerFactory()) , 但其他中间件抛出的异常不会被记录。
  • 我试图至少向客户端发送一条有意义的错误消息,但尽管 <customErrors mode="Off"/><deployment retail="false"/> ,Azure 拒绝返回除 {"message":"an error has occurred"} 之外的任何内容..我尝试了 Azure 网站和 Azure 云服务。
  • 我看到一些应该与 OWIN 配合使用的云替代方案,例如 Elmah.io 或 Raygun.io,但我不需要它们的云功能,而且绝对不值得每年支付数百美元只是为了记录一些异常。

记录应用程序抛出的任何可能的异常的最佳方式应该是什么?

感谢您的帮助

最佳答案

您看过这个链接吗? http://www.asp.net/web-api/overview/error-handling/web-api-global-error-handling

由于无法使用异常过滤器捕获所有异常,因此他们建议使用 IExceptionLogger 和 IExceptionHandler 来允许在 Web Api 2 中进行全局错误处理。

之后,如果它不符合您的需要,您可以构建一个 OwinMiddleWare 并将其放置在第一个位置(在身份验证阶段之前),该中间件可以:

  1. 在响应 header 中创建 requestId
  2. 在发送响应之前分析响应代码,如果它不是 IsSuccessStatusCode,您可以将异常消息记录到数据库并替换响应的内容,以使用 requestId 向客户端发送简单的错误消息(以允许您可以在数据库中找到相关的异常)

希望这有帮助

关于azure - 如何使用 OWIN 正确记录每个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27216262/

相关文章:

java - 为什么可以在 Java 中记录 OutOfMemory 错误?

Azure Web 应用程序全局化

reactjs - 使用 React 的 Azure Bot Framework 存在问题

Azure Active Directory图形API查询用户

logging - WIX:MSI 生成的日志文件具有额外的空格字符

c++ - Visual Studio 6 何时捕获结构化异常?

azure - 需要在 Azure VM 上安装 SSL.com 证书的帮助

c# - .NET 有没有类似于 Java 的垃圾收集日志的东西?

logging - HBase 适合存储和查询日志数据吗?

C# 异常和代码中断