ASP.NET Core 提供了好用的 Logging API,預設就已經將 Logger 物件放進 DI 容器,能直接透過 DI 取用記錄 Log 的物件。
本篇將介紹 ASP.NET Core 的 Logging 使用方式。
同步發佈至個人部落格:
John Wu's Blog - [鐵人賽 Day18] ASP.NET Core 2 系列 - Logging
ASP.NET Core 2 預設就把 Logger 放進 DI 容器,能直接透過 DI 取用 ILogger
實例。如下:
Controllers\HomeController.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace MyWebsite.Controllers
{
public class HomeController : Controller
{
private readonly ILogger _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public string Index() {
_logger.LogTrace("This trace log from Home.Index()");
_logger.LogDebug("This debug log from Home.Index()");
_logger.LogInformation("This information log from Home.Index()");
_logger.LogWarning("This warning log from Home.Index()");
_logger.LogError("This error log from Home.Index()");
_logger.LogCritical("This critical log from Home.Index()");
return "Home.Index()";
}
}
}
以下都會用
Home.Index()
做為 Log 輸出的範例。
透過指令執行 dotnet run
,就可以看到 Log 訊息:
會發現上例預期輸出 6 筆 Log,但實際上確出現一大堆 Log,其中只有 4 筆 Log 是由 Home.Index()
輸出。
ASP.NET Core 的 Log 有分為以下六種:
若要變更 Log 輸出等級,可以打開 Program.Main
在 WebHost Builder 加入 ConfigureLogging
設定。
Program.cs
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;
namespace MyWebsite
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Trace))
.Build();
}
}
}
大部都是 Microsoft.AspNetCore
輸出的 Log,但這類型的 Log 你可能不需要關注。如下:
外部參考的套件,通常只需要關注有沒有 Error 層級以上的錯誤。
因此,可以透過外部檔案設定 Log Level,過濾掉一些你不需要關注的 Log。
建立一個 settings.json 的檔案,依照需求增減 Log 過濾條件。內容如下:
Configuration\settings.json
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"MyWebsite": "Trace",
"System": "Error",
"Microsoft": "Error"
}
}
}
在 Program.Main
的 ConfigureLogging
設定 Log 組態檔。
Program.cs
using System.IO;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace MyWebsite
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging((hostContext, logging) =>
{
var env = hostContext.HostingEnvironment;
var configuration = new ConfigurationBuilder()
.SetBasePath(Path.Combine(env.ContentRootPath, "Configuration"))
.AddJsonFile(path: "settings.json", optional: true, reloadOnChange: true)
.Build();
logging.AddConfiguration(configuration.GetSection("Logging"));
})
.Build();
}
}
}
GetSection
是指定從 Configuration\settings.json 檔的 Logging 區塊讀取內容。
輸出結果:
Introduction to Logging in ASP.NET Core