當 Web 應用程式上傳到 Azure App Service 之後,開發人員第一個要面對的問題,就是要怎樣偵錯(Debug)?在本機開發應用程式通常開發工具都會幫我們整理好各種資訊,但是上到雲端環境後,很多人就會顯得手忙腳亂,有時候說是「瞎子摸象」也不為過,非常痛苦。這篇文章我打算帶大家入門,教大家怎樣用免費又簡單的方式使用 Log stream (記錄資料流) 查看應用程式執行紀錄!
啟用應用程式記錄 (Windows)
應用程式記錄 (Application Logging) 有提供兩種類型,兩種都可以同時啟用,但是各有不同的特性:
-
檔案系統 (Filesystem)
這是一種臨時的偵錯解決方案,比較不適合長期保存,且啟用之後 12 小時內就會自動關閉。
-
Blob
你只要指定一個 Storage Account 的 Blob Container 就可以長久保存紀錄,但你可以透過 Retention Period (Days)
設定應用程式記錄的最多保留天數。
如果你想透過 Log stream (記錄資料流) 查看應用程式執行紀錄,那就一定要啟用 應用程式記錄 (檔案系統)
這一項才有效果!🔥
決定一個紀錄層級 (Log Level)
在啟用應用程式記錄的時候,有個 層級
(Level
) 欄位,當中有幾個不同的選項,他跟我們在開發 .NET 應用程式的 LogLevel 有直接相關,所以一定要選擇正確!
應用程式的調整方法 (.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 個步驟就可以啟用:
-
安裝 Microsoft.Extensions.Logging.AzureAppServices 套件
dotnet add package Microsoft.Extensions.Logging.AzureAppServices
-
設定 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 之後,就會自動連接站台:
相關連結