Azure Application Insights中自定义异常详情不显示问题求助
问题描述
我有一个C#函数应用,其中某函数包含以下代码块:
try { var purchaseItem = await PurchaseCatalogItemForAzureServer.PurchaseItem(serverApi, "----", null); if (purchaseItem.isError) return purchaseItem.ToNonGeneric(); } catch (Exception e) { throw new Exception("Id: " + id + " E: " + e.ToString()); }
当自定义异常触发时,在Application Insights中看到的堆栈跟踪信息如下:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException: at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+<ExecuteWithLoggingAsync>d__26.MoveNext (Microsoft.Azure.WebJobs.Host, Version=3.0.37.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:352) at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+<TryExecuteAsync>d__18.MoveNext (Microsoft.Azure.WebJobs.Host, Version=3.0.37.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:108) Inner exception System.Exception handled at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw: at AzureFunctionsForPM2.PurchaseItem+<Run>d__0.MoveNext (AzureFunctionsForPM2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: C:\Users\yusuf\Desktop\TestFuctionApp\AzureFunctionsForPM2\AzureFunctionsForPM2\Item\Functions\PurchaseItem.cs:125) at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`2+<InvokeAsync>d__10.MoveNext (Microsoft.Azure.WebJobs.Host, Version=3.0.37.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionInvoker.cs:52) at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+<InvokeWithTimeoutAsync>d__33.MoveNext (Microsoft.Azure.WebJobs.Host, Version=3.0.37.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:581) at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+<ExecuteWithWatchersAsync>d__32.MoveNext (Microsoft.Azure.WebJobs.Host, Version=3.0.37.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:527) at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at System.Runtime.CompilerServices.TaskAwaiter.GetResult (System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+<ExecuteWithLoggingAsync>d__26.MoveNext (Microsoft.Azure.WebJobs.Host, Version=3.0.37.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35: D:\a\_work\1\s\src\Microsoft.Azure.WebJobs.Host\Executors\FunctionExecutor.cs:306)
可以看到自定义异常仅显示行号和Inner exception System.Exception handled at...提示,没有展示详细信息。函数项目未继承FunctionsStartup或Startup类,当前host.json配置如下:
{ "version": "2.0", "logging": { "LogLevel": { "Default": "Error", "System": "Error", "Microsoft": "Error", "Host.Results": "Error", "Function": "Error", "Host.Aggregator": "Error", }, "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request;Dependency;Event;PageView;Trace" }, "enableDependencyTracking": false, "EnableDependencyTrackingTelemetryModule": false, "enablePerformanceCountersCollection": false, "EnablePerformanceCounterCollectionModule": false, "enableLiveMetrics": true, "EnableRequestTrackingTelemetryModule": false, "EnableEventCounterCollectionModule": false, "EnableAppServicesHeartbeatTelemetryModule": true } } }
如何解决自定义异常详情无法在Application Insights中显示的问题?
解决方案
1. 保留原始异常的内部引用
当前代码重新抛出异常时,未将原始异常作为内部异常传递,导致Application Insights无法追踪完整异常链。修改catch块代码:
catch (Exception e) { throw new Exception($"Id: {id}", e); }
新抛出的异常会包含原始异常的完整信息,Application Insights就能显示内部异常详情。
2. 调整Application Insights采样配置
当前samplingSettings排除了Trace类型,而异常详情可能通过Trace日志传递。修改excludedTypes移除Trace:
"samplingSettings": { "isEnabled": true, "excludedTypes": "Request;Dependency;Event;PageView" }
避免采样过滤掉异常相关的跟踪信息,确保完整的异常细节被收集。
3. 启用请求跟踪模块
当前配置中EnableRequestTrackingTelemetryModule设为false,该模块负责收集请求相关的异常详情。修改为true:
"EnableRequestTrackingTelemetryModule": true
启用后,Application Insights会更完整地捕获请求过程中的异常信息,包括自定义异常详情。
4. 检查日志级别配置
当前日志级别已设为Error,若需要更详细的排查信息,可临时将Function日志级别调整为Debug:
"Function": "Debug"
排查完成后再改回Error即可。
内容的提问来源于stack exchange,提问作者Yusuf Demir
相关产品推荐
相关产品推荐

