大家好啊~昨天我們學到要如何透過MailKit 這第三方套件來來做郵件寄送的功能,並且嘗試加上附件的功能。納今天的話要來說個很重要的東西logginig(日記記錄),log 對開發專案的人是非常重要的,開發上常常出現的報錯、紀錄等等問題都是可以使用log 來記錄起來
若要建立記錄,請使用ILogger<TCategoryName>
相依性插入 (DI) 的物件
public class AboutModel : PageModel
{
private readonly ILogger _logger;
public AboutModel(ILogger<AboutModel> logger)
{
_logger = logger;
}
public void OnGet()
{
_logger.LogInformation("About page visited at {DT}",
DateTime.UtcNow.ToLongTimeString());
}
}
記錄組態通常是由 appsettings.{ENVIRONMENT}.json 檔案的 Logging 區段所提供,其中 {ENVIRONMENT} 預留位置是環境,像我們如果是開發狀況下就會在appsettings.Development.json 檔案
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
在Loggingg屬性有LogLevel與紀錄提供者屬性。LogLevel 會指定要針對所選類別記錄的最小層級。 在上述 JSON 中,會指定 Information 和 Warning 記錄層級。 LogLevel 表示記錄的嚴重性,範圍從 0 到 6
Trace = 0
Debug = 1
Information = 2
Warning = 3
Error = 4
Critical = 5
None = 6
指定 LogLevel 時,會針對指定層級和更高層級的訊息啟用記錄。 在上述 JSON 中,Default 類別會記錄為 Information 和更新版本。 例如,會記錄 Information、Warning、Error 和 Critical 訊息。 如果未指定 LogLevel,則記錄預設為 Information 層級
ASP.NET Core提供的紀錄分別如下
名稱 | 使用方式 | 描述 |
---|---|---|
Console(預設已加入) | logging.AddConsole(); | 會將輸出記錄到主控台 |
Debug(預設已加入) | logging.AddDebug(); | 會使用 system.servicemodel 類別來寫入System.Diagnostics.Debug記錄輸出 |
EventSource | logging.AddEventSourceLogger(); | 會寫入名為的跨平臺事件來源 Microsoft-Extensions-Logging |
EventLog(僅限Windows) | logging.AddEventLog(); | 會將記錄輸出傳送至 Windows 事件記錄檔 |
Azure App Service | logging.AddAzureWebAppDiagnostics(); | 將記錄寫入至 Azure App Service 應用程式檔案系統中的文字檔,並寫入至 Azure 儲存體帳戶中的 Blob 儲存體 |
要更換Logging provider,可以從Program.cs中修改成下列範例:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
第三方套件
記錄速度應該很快,不值得花費非同步程式碼的效能成本來處理。 若記錄資料存放區很慢,請不要直接寫入其中。 請考慮一開始將記錄寫入到快速的存放區,稍後再將其移到慢速存放區。 例如,當記錄到 SQL Server 時,請勿在 Log 方法中直接執行,因為 Log 方法是同步的。 相反地,以同步方式將記錄訊息新增到記憶體內佇列,並讓背景工作角色提取出佇列的訊息,藉此執行推送資料到 SQL Server 的非同步工作
今天鐵人賽就到這裡,大家明天見~~~
參考資料: