The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

ASP.NET 部署到 Azure App Service 如何使用 Log stream 查看應用程式紀錄

當 Web 應用程式上傳到 Azure App Service 之後,開發人員第一個要面對的問題,就是要怎樣偵錯(Debug)?在本機開發應用程式通常開發工具都會幫我們整理好各種資訊,但是上到雲端環境後,很多人就會顯得手忙腳亂,有時候說是「瞎子摸象」也不為過,非常痛苦。這篇文章我打算帶大家入門,教大家怎樣用免費又簡單的方式使用 Log stream (記錄資料流) 查看應用程式執行紀錄!

啟用應用程式記錄 (Windows)

應用程式記錄 (Application Logging) 有提供兩種類型,兩種都可以同時啟用,但是各有不同的特性:

應用程式記錄 (Application Logging)

  1. 檔案系統 (Filesystem)

    這是一種臨時的偵錯解決方案,比較不適合長期保存,且啟用之後 12 小時內就會自動關閉。

  2. Blob

    你只要指定一個 Storage Account 的 Blob Container 就可以長久保存紀錄,但你可以透過 Retention Period (Days) 設定應用程式記錄的最多保留天數。

如果你想透過 Log stream (記錄資料流) 查看應用程式執行紀錄,那就一定要啟用 應用程式記錄 (檔案系統) 這一項才有效果!🔥

決定一個紀錄層級 (Log Level)

在啟用應用程式記錄的時候,有個 層級 (Level) 欄位,當中有幾個不同的選項,他跟我們在開發 .NET 應用程式的 LogLevel 有直接相關,所以一定要選擇正確!

Application logging

Log Level

應用程式的調整方法 (.NET Framework)

如果你開發的是 ASP.NET MVC 5 或 ASP.NET WebForms 應用程式,基本上什麼都不用設定,只要透過 System.Diagnostics.Trace 類別提供的靜態方法,就可以將資料輸出到 Azure App Service 的應用程式記錄中!

// 只要設定為 Verbose, Information, Warning, Error 層級都會輸出以下記錄
System.Diagnostics.Trace.TraceError("If you're seeing this, something bad happened");

// 只要設定為 Verbose, Information, Warning 層級都會輸出以下記錄
System.Diagnostics.Trace.TraceWarning("If you're seeing this, something bad happened");

// 只要設定為 Verbose, Information 層級都會輸出以下記錄
System.Diagnostics.Trace.TraceInformation("If you're seeing this, something bad happened");

應用程式的調整方法 (.NET / .NET Core)

如果你開發的是 ASP.NET Core 應用程式,也只需要 2 個步驟就可以啟用:

  1. 安裝 Microsoft.Extensions.Logging.AzureAppServices 套件

    dotnet add package Microsoft.Extensions.Logging.AzureAppServices
    
  2. 設定 Logging 來源

    builder.Logging.AddAzureWebAppDiagnostics();
    

就這樣,設定完成!應用程式部署到 Azure App Service 之後,就可以從 Log stream 頁面查看應用程式的「即時」紀錄了,比透過 Application Insights 上面收集的記錄還要即時輸出,非常適合用來偵錯應用程式!👍

注意:無論你在 appsettings.json 什麼樣的 Logging 記錄等級設定,在 Log stream 顯示的應用程式記錄都會以 Azure Portal 上面設定的 Level 為準。我用以下 appsettings.json 設定為例,即便你關閉了所有紀錄輸出,但你在 App Service logging 設定的 Level 為 Warning,那麼在 Log stream 所看到的依然會是 Warning 以上的紀錄內容!

{
  "Logging": {
    "LogLevel": {
      "Default": "None",
      "Microsoft.AspNetCore": "None"
    }
  },
  "AllowedHosts": "*"
}

輸出記錄的寫法,就使用 .NET 標準的方式撰寫即可,以下是 ILogger<T> 程式碼範例:

public class PrivacyModel : PageModel
{
    private readonly ILogger<PrivacyModel> _logger;

    public PrivacyModel(ILogger<PrivacyModel> logger)
    {
        _logger = logger;
    }

    public void OnGet()
    {
        _logger.LogCritical("[CRITI]: About page visited at {DT}",
                                  DateTime.UtcNow.ToLongTimeString());
        _logger.LogError("[ERROR]: About page visited at {DT}",
                                  DateTime.UtcNow.ToLongTimeString());
        _logger.LogWarning("[WARNN]: About page visited at {DT}",
                                  DateTime.UtcNow.ToLongTimeString());
        _logger.LogDebug("[DEBUG]: About page visited at {DT}",
                                  DateTime.UtcNow.ToLongTimeString());
        _logger.LogInformation("[INFOR]: About page visited at {DT}",
                                  DateTime.UtcNow.ToLongTimeString());
        _logger.LogTrace("[TRACE]: About page visited at {DT}",
                                  DateTime.UtcNow.ToLongTimeString());
    }
}

線上查看 Log stream 的方法

其實你只要點進 Log stream 之後,就會自動連接站台:

image

相關連結

留言評論