首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用OWIN正确记录每个异常

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

Stack Overflow用户
提问于 2014-11-30 17:50:08
回答 1查看 7.3K关注 0票数 18

我的问题应该很简单,但不幸的是我解决不了这个问题。

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

我确实需要跟踪每个中间件(例如OAuthAuthorizationServerProvider或SignalR持久连接)中出现的异常,但我肯定不知道如何实现它。

  • 我尝试了Elmah,但由于缺少HttpContext,它似乎无法与OWIN一起正常工作。
  • 我试过使用log4net,但我只能使用自定义ExceptionFilterAttribute记录Web控制器引发的异常。其他人则被忽视。
  • 我试图定义一个自定义的LoggerFactory,并在启动时使用app.SetLoggerFactory(new MyLoggerFactory())分配它,但是其他中间件引发的异常不会被记录。
  • 我试图得到至少一个有意义的错误消息发送给客户端,但尽管<customErrors mode="Off"/><deployment retail="false"/>,Azure拒绝返回任何东西,除了{"message":"an error has occurred"}。我尝试了Azure网站和。
  • 我看到了一些应该与OWIN一起工作的云替代方案,比如Elmah.io或Raygun.io,但我不需要它们的云特性,而且仅仅为了记录一些异常情况,每年支付数百美元是绝对不值得的。

记录应用程序引发的任何可能的异常的最佳方法应该是什么?

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 14:18:05

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

因为不能使用exceptionFilter捕获所有异常,所以他们建议使用IExceptionLogger和IExceptionHandler来允许Web 2中的全局错误处理。

在此之后,如果它不适合您的需要,您可以构造一个OwinMiddleWare,您将把它放在第一个位置(在身份验证阶段之前),这个中间件可以:

  1. 在响应的标题中创建一个requestId
  2. 在发送响应之前分析响应代码,如果不是IsSuccessStatusCode,则可以将异常消息记录到DB并替换响应的内容,以便使用requestId向客户端发送简单的错误消息(允许在db中查找相关异常)

希望能帮上忙

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27216262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档