Azure functions 此应用程序Insight/Azure功能是否存在缺陷?或者我的理解是错误的

Azure functions 此应用程序Insight/Azure功能是否存在缺陷?或者我的理解是错误的,azure-functions,azure-application-insights,Azure Functions,Azure Application Insights,今天,我将Azure功能与Application insight集成,用于应用程序日志记录,特别是捕获错误堆栈跟踪 首先,我编写了没有try-catch块的Azure函数,因此它在Monitor部分和application insight中显示了正确的状态/信息 后来我添加了try-catch块并记录了更多的数据,如 catch(Exception ex) { log.Error(inputData); log.Error(ex.Message); return req.

今天,我将Azure功能与Application insight集成,用于应用程序日志记录,特别是捕获错误堆栈跟踪

首先,我编写了没有try-catch块的Azure函数,因此它在Monitor部分和application insight中显示了正确的状态/信息

后来我添加了try-catch块并记录了更多的数据,如

catch(Exception ex)
{
    log.Error(inputData);
    log.Error(ex.Message);
    return req.CreateResponse(HttpStatusCode.InternalServerError);
}
您可以在下面的附件中看到,ResultCode为500,状态为绿色。。。为什么? 我认为,由于这个问题,Application Insight没有在错误/失败的请求查询中显示此数据

在Application Insight中未找到任何记录

exceptions
|where operation_Id == "c5b5a345-fa11-4356-b769-b34d1c6619e5" 
| order by timestamp desc 
| project operation_Id , timestamp 

成功检查表示Azure函数调用是成功(=未引发异常)还是失败(=引发异常)

在第一次调用时,发生了一个异常,所以函数调用并没有正常终止,所以使用了红色复选标记

当您手动捕获并返回500时,就函数调用而言,这仍然是可以的——它完成并返回了结果

函数运行时不遵循HTTP语义,规则对所有触发器类型都是通用的

Application Insight默认指标不会在失败的请求图中显示已处理的异常,开发人员需要为已处理的异常生成查询,例如

requests
| where success == "False" and timestamp >= ago(7d) 
| join kind= inner traces on operation_Id  
| project operation_Id , timestamp, message, severityLevel  
| order  by timestamp, operation_Id

severityLevel :- 1 = Info and 3 = Error

我同意函数运行时不遵循HTTP语义,但我记录的异常信息呢?这是否意味着我们不应该在Azure中使用try-catchfunction@PankajRawat我认为
log.Error
不会记录“异常”,而是跟踪(?)异常有堆栈跟踪等,您不提供在调用Error时传递异常。比如
log.Error(例如Message,ex)
。我相信这会将所有信息流到App Insights。我已经通过了异常,仍然拥有success 500,是否可以将行为更改为使用success false登录?我也面临同样的问题,但我不确定为什么要显式地重新引用
throw
异常以使其成功。
throw
与没有try-catch的异常有何不同?