gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:35:19 24 4
gpt4 key购买 nike

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

基本上,我有一些由 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com