logging - 应该如何处理内部 web api 错误?

标签 logging error-handling asp.net-web-api

在我们的应用程序中,我们有一组相当简单的日志记录钩子(Hook)(MVC 和 API Controller 上的 IExceptionFilters 和 Application_Error() 中的一个额外的 catch-all),但是有一整类错误不会触发任何一个。如果从 WebAPI 本身或内部使用的某些东西(例如由依赖解析器创建的类的类型初始化程序)抛出异常,我得到的只是一个 500 响应被发送到客户端。

我发现捕获错误详细信息的唯一方法是使用 HttpConfiguration.IncludeErrorDetailPolicy 来配置应用程序以发出错误详细信息 - 但是,将错误详细信息广播到世界是一种明显的不良做法,所以我宁愿转这完全关闭,或将其设置为有条件的(例如,仅限本地。)..但这意味着远程进入运行应用程序的服务器并使用可以检查响应的工具(如 IE 或 Google)在本地调用 API Chrome),以便弄清楚发生了什么。

我在这里看到了另一个类似的问题( here ),但是我们认为,提出的解决方案(使用 DelegatingHandler 来检查响应)不能满足我们的需求。真的没有我可以 Hook 的事件、我可以使用的扩展点或类似的东西来捕获发生的实际异常吗?

(顺便说一句,我想我可以将我的 IncludeErrorDetailPolicy 更改为 Always 并使用另一个线程中提供的解决方案来捕获 MessageHandler 中的错误详细信息,记录它们,并从发送给客户端的响应中手动清除它们,但是将是一个讨厌的黑客。)

想法? :/

最佳答案

我们向 Microsoft 合作伙伴网络提出了支持请求,他们返回了我认为更好的答案。

这个想法是用一个将默认 Controller 创建行为与任何其他所需行为包装起来的实现替换平台的默认 IHttpControllerActivator 实现。

在我们的例子中,这意味着使用 try/catch/throw 结构和对我们的日志服务的调用来包装 DefaultHttpControllerActivator 的 Create 方法。这可能无法提供 100% 的覆盖率,但我们遗漏的大多数异常(exception)都与 Controller 的创建有关,因此它应该会有很大帮助。

我真的很想能够在 HttpControllerDispatcher 中 Hook HandleException 方法,但它既是私有(private)的又是静态的,所以嗯。

关于logging - 应该如何处理内部 web api 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405102/

相关文章:

c++ - 为什么这段代码catch block 不执行?

visual-studio-2010 - 只读模型属性未在 Web API 中序列化

asp.net - The source map 'data:application/json;base64,' ;' for file ' domain/systemjs/dist/system.src.js' 由于错误无法正确加载

.net - 如何使用 angular $http 服务从返回的 JSON 对象中获取 Odata Next Link

python - 跨模块使用相同的日志记录级别进行日志记录

c# - .Net 自定义 TraceListener.TraceEvent 未触发

postgresql - postgres 9.1 日志文件更改

将 Gulp 控制台输出记录到文件中

php - 解析错误: syntax error, unexpected '}' , expecting ',' or ';' issue [duplicate]

php - 将特定值插入数据库,并在表上显示?