Azure 函数应该记录错误或抛出异常?

问题描述 投票:0回答:2

我的 Azure 函数(Http 触发器)可能会失败。我还为其配置了 Application Insights。

如果出现错误(哪个更好):

  1. 捕获异常,用更多信息包装并重新抛出它。 (发送 500 条回复)或者
  2. 捕获异常,记录它,包装它,重新抛出给调用者。 (发送 500 条回复)或者
  3. 捕获异常,记录它(不要抛出它),手动发送 500 响应。

Application Insight 能够记录异常。我真的不认为同时记录错误和抛出异常有什么意义。

指导方针是什么?什么是好的做法?

c# azure azure-functions azure-application-insights
2个回答
2
投票

根据我使用 Python 构建 HTTP 触发的 azure 函数的经验,我注意到:当处理异常然后手动将某些内容返回给客户端时,您确实可以控制函数返回值,但框架将函数的工作标记为“成功” ,这使得在 Application Insights 中跟踪和监控变得更加困难。

对于你的问题,我最终得到了一个混合了 1 和 3 的 catch 子句 即一种混合方法,我尝试识别异常的起源,然后对于我的代码中的异常,我将其包装并返回 500,对于源自我正在使用的代码的其他异常,我重新抛出它们并让azure 函数框架返回 500 并将函数的作业标记为“失败”。


0
投票

Azure Functions 中的错误处理指南记录在此处。具体

任何函数代码的最顶层都应包含 try/catch 块。在 catch 块中,您可以捕获并记录错误。 ...根据您的具体重试策略,您还可能引发新的异常以再次运行该函数。

我同意记录错误并抛出另一个错误似乎是多余的。出现新异常的可能原因是为了防止意外向调用者泄露详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.