簡體   English   中英

C# Azure 函數和 Application Insights - LogError 未顯示異常

[英]C# Azure Functions and Application Insights - LogError not showing exception

運行 C# v3 Function 應用程序時,我在 Application Insights 上遇到了一些問題。 根據說明,一切都在 Azure 中設置,以使用應用程序洞察力。 在 host.json 文件中,我包含了以下設置:

"logging": {
    "LogLevel": {
      "Default": "Information"
    },
    "applicationInsights": {
      "samplingExcludedTypes": "Request",
      "samplingSettings": {
        "isEnabled": true
      }
    }
  },

我正在使用依賴注入,所以在應用程序中啟動 class,然后在需要的地方注入 ILogger class:

using Microsoft.Extensions.Logging;

...

builder.Services.AddLogging();

在代碼中有幾次我正在捕獲異常、處理它並想要記錄它而不是拋出異常。 例如,尋找一個可能存在也可能不存在的 blob 容器圖像——我仍然可以返回一個有效的響應,而不是因為一個瑣碎的問題而拋出整個事情。

但是,Application Insights 似乎沒有在跟蹤中記錄異常,即使它已傳遞給記錄器:

catch (ArgumentException e)
{
     var msg = $"Error encountered blah blah blah";
     logger.LogWarning(e, msg);
     return Result.Failure<string>(msg);
}

我可以在 Application Insights 中看到正在記錄的警告以及消息,但堆棧跟蹤始終從跟蹤中的消息/自定義維度中丟失。 如果我使用 LogError,也會發生同樣的情況。

客戶:

traces
| where cloud_RoleName == "my-app" and severityLevel == 2

我在這里查看了大量的文檔和問題,但很難找到一個有效的答案,或者很好地解釋正在發生的事情。 Azure Functions + App Insights 似乎非常“如果你打開它就會神奇地工作”,或者答案是 ASP.NET 核心,或者只是過時了。

問題是只有應用程序拋出的異常才會顯示在 App Insights 的異常區域中並帶有堆棧跟蹤嗎? (如果是這樣,您可以在此處記錄錯誤而不拋出異常嗎?)

我是否缺少 host.json 或啟動中的關鍵配置? 圖書館? (我已經嘗試添加 Microsoft.Azure.WebJobs.Logging.ApplicationInsights)

如果有必要,我也在考慮改用 Serilog + App Insights sink - 但當它看起來應該“開箱即用”時,我並不特別想這樣做。

任何人都可以幫忙嗎?

感謝@PeterBons 的幫助,為了讓您記錄的異常出現在 App Insights 的異常表中,您需要確保:

  1. 如果您使用采樣,則將“異常”添加到您的 host.json 中的“samplingExcludedTypes”以確保它們都被記錄

  2. 您需要在您的項目中引用“Microsoft.Azure.WebJobs.Logging.ApplicationInsights”nuget package(我沒有留下相同的日志記錄到其他所有異常)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM