2017-09-25 53 views
1

我无法找到一种方法来使http调用失败,并且包含自定义错误响应。如何在azure函数中触发失败http触发器,带有自定义错误响应

调用context.done()允许自定义响应(但不表示在应用洞察失败)

调用context.done(真实的,XXX)并创建一个失败,但返回通用错误用户(不管是什么,我把XXX):

{"id":"b6ca6fb0-686a-4a9c-8c66-356b6db51848","requestId":"7599d94b-d3f2-48fe-80cd-e067bb1c8557","statusCode":500,"errorCode":0,"message":"An error has occurred. For more information, please check the logs for error ID b6ca6fb0-686a-4a9c-8c66-356b6db51848"} 

这仅仅是我在试图让在Azure上运行funcs中一种快速网页API跑进了最新的头痛。如果你不能跟踪错误,那么它就不应该被称为“应用程序见解”。有任何想法吗?

回答

1

成功将是真实的,但resultCode为将被设置为你的价值。

尝试一个AppInsights查询这样的:

// Get all errors 
requests 
| where toint(resultCode) >= 400 
| limit 10 

[更新] 在请求的ID值是 '功能实例id',它唯一地标识该调用。

还有一个'trace'表,它包含来自您的azure函数的日志消息。您可以通过operation_Id在请求和跟踪之间进行连接。

requests 
| where toint(resultCode) >= 400 
| take 10 
| join (traces) on operation_Id 
| project id, message, operation_Id 

响应正文不会自动记录到AppInsights。您需要添加一些明确的日志语句来捕获它。

+0

列出了请求的行,但没有链接到跟踪日志,如“失败”视图。除了计数失败之外,基本上没有任何有用的信息用于解除。 –

+0

已更新答案以显示如何获取跟踪日志和加入请求。 –

+0

此外,即使是“应用程序见解”的一部分。我无法从应用程序见解中进入“分析”查询页面。这似乎是一个完全不同的服务。为什么MS必须如此混乱?哇,一旦你找到一个名为“Analytics”的按钮并点击它,它会将你带到一个标签为“Application Insights”的页面,这是从实际的“Application Insights”仪表板无法访问的。 –

0

为什么不使用context.res来返回HTTP触发函数的客户响应?

enter image description here

+0

这对用户来说很好,但无法跟踪应用程序洞察中的错误。这被认为是成功的。如果你在done()中放了一个truthy值,那么它跟踪为错误,但忽略了你的身体并代替了bs响应。 –

+0

要为Azure功能设置Application Insights,请查看[本文档](https://github.com/Azure/Azure-Functions/wiki/App-Insights-(预览))和[本文](https: //stackoverflow.com/questions/46153008/azure-functions-with-node-js-azure-service-bus-and-apps-insight-error-on-setu/46167895#46167895)。 –

+0

我正在尝试在门户中使用预定义的“失败”视图。我知道我可以安装一堆库并执行自定义事件抛出,但在我看来,跟踪失败的请求应该是构建到“无服务器”托管环境中的东西。 –

相关问题