ASP.Net Core 內建 ILogger 介面方便我們可以實做或串接各種 Log 的套件,而當我們把程式部署到 App Service 但是又不想或不需要把 Log 記錄到 Application Insight,只是想比較單純的用文字檔來收集 Log 就好,本文就針對這樣的情境透過簡單的設定和程式碼就可以把 Log 記錄到我們指定的儲存體內。
前言
ASP.Net Core 內建 ILogger 介面方便我們可以實做或串接各種 Log 的套件,而當我們把程式部署到 App Service 但是又不想或不需要把 Log 記錄到 Application Insight,只是想比較單純的用文字檔來收集 Log 就好,本文就針對這樣的情境透過簡單的設定和程式碼就可以把 Log 記錄到我們指定的儲存體內。
實做
程式碼相當的簡單,因為單純要寫 Log,所以也不用特別安裝別的套件,底下程式碼以 Razor Page 為例,就單純的寫入一個記錄 App Service 執行個體編號的錯誤記錄,針對 App Service 多執行個體議題可以參考前一篇文章,之後就直接把網站部署到 App Service 吧!
public void OnGet()
{
string instanceId = Environment.GetEnvironmentVariable("WEBSITE_INSTANCE_ID");
_logger.Log(LogLevel.Error, $"{instanceId} Error Log");
}
接下來的設定都是透過 Azure Portal 設定就可以了。
首先要先安裝 App Service 的延伸模組 Microsoft.AspNetCore.AzureAppServices.SiteExtension
,App Service 點選 App Service 記錄,最在上面就會提示安裝,點下去安裝就可以了,如果沒有看到的話我們也可以到 Kudu 搜尋之後安裝。
安裝好之後就可以打開應用程式記錄,選擇要存到檔案系統或是 Blob 內,並且設定要記錄到的訊息層級。檔案系統的話會直接存檔到 App Service 內的檔案,這邊要注意的是根據說明會在 12 小時之後關閉,所以如果要長期記錄的話,就不建議用這個選項,或是另外把檔案傳出去別的地方記錄,只是這些 Log 要取得只能透過 ftp 來存取,所以建議還是使用 Blob 來儲存這些 Log。
針對檔案系統,可以在記錄資料流看到即時的 Log 資料,方便我們線上處理錯誤的時候來察看記錄。
如果要從 Kudu 取得檔案的話,依序點選到目錄內,就可以看到產生的 Log 檔案,
點選檔案就可以看到記錄的內容,這邊要特別說明的點就是多個執行個體的記錄都被儲存在同一個檔案內。
如果是設定在儲存體的內的,就可以在儲存體內找到檔案,這邊不同的點是針對不同執行個體他是分開檔案儲存的,另外也可以發現路徑是到小時去分資料夾。
結論
微軟針對 .NET Core 在 Azure 的整合上相當的不錯,如果僅想針對應用程式記錄存成文字檔案,之後可以透過其它程式到儲存體內取得檔案作後續的儲存或是分析,只需要簡單的步驟就可以完成了,之後如果想存到 Application Insight 的話也只需要另外安裝 SDK 跟加上一些 Config 設定就可以完成了,如果有感興趣的朋友可以直接參考官方這一篇文件的教學來實做就可以囉。