ASP.NET Core 框架提供的 logging API 讓開發人員可以輕鬆地使用內建或第三方的日誌紀錄框架。今天來說明怎麼在 ASP.NET Core 應用程式中紀錄將錯誤或相關資訊。
跟 Configuration 類似,ASP.NET Core 使用的日誌紀錄是由 LoggingProvider 來設定。
使用 MVC 範本建立專案時,預設會呼叫 WebHost.CreateDefaultBuilder
擴充方法,其中會將 Logging 的設定片段作為日誌紀錄的設定來源,並加入 Console 和 Debug 兩種 provider。或者也可以在呼叫 ConfigureLogging
擴充方法時,先呼叫 ClearProvider
後再依需求加入 provider。
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var startupAssemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
return WebHost.CreateDefaultBuilder(args)
.ConfigureLogging((hostContext, loggingBuilder) =>
{
loggingBuilder.ClearProviders();
loggingBuilder.AddConfiguration(hostContext.Configuration.GetSection("Logging"));
loggingBuilder.AddConsole();
loggingBuilder.AddDebug();
})
.UseStartup(startupAssemblyName);
}
在應用程式啟動正確設定記錄方式後,可以在需要使用記錄的類別注入 ILogger<TCategoryName>
實例,再呼叫 _logger.Log{LogLevel}
就可以將訊息寫到日誌記錄中。
public class LoggerController : Controller
{
private readonly ILogger<LoggerController> _logger;
public LoggerController(ILogger<LoggerController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogWarning("Log Information in LoggerController");
return View();
}
}
日誌記錄可以透過前兩天說明的設定來源來做設定,通常會寫在設定中的 Logging
片段。例如在 MVC 範本建立的專案中的 appsettings.Development.json 檔案:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
LogLevel
可以設定在不同命名空間下預設的記錄等級 (LogLevel)。也可以用 {ProviderName}
屬性來對不同提供者做設定,例如:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"Console": {
"ironman2018": "Warning"
}
}
}
呼叫 _logger.Log{LogLevel}
時可以寫入對應記錄等級的日誌記錄。在設定檔中設定的 LogLevel
代表接受的最低等級。ASP.NET Core 框架中提供的記錄等級由嚴重性低到高分別為:
關於不同等級的說明跟適用情境,剛好前陣子看到有人分享不錯的文章可以參考:日志的5个级别