一.概述
ASP.NET Core 支持適用於各種內置和第三方日志記錄, 供程序的日志記錄 API,本文介紹了如何將日志記錄 API 與內置提供程序一起使用。對於第三方日志記錄提供程序使用,文章最后有鏈接。
1.1 添加內置日志提供程序
日志記錄提供程序能夠用於顯示日志信息或存儲日志,比如控制台提供程序在控制台上顯示日志,Azure Application Insights 提供程序會將這些日志存儲在 Azure Application Insights 中。 可通過添加多個提供程序將日志發送到多個目標。
要添加提供程序,請在 Program.cs 中調用提供程序的 Add{provider name} 擴展方法:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.SetBasePath(Directory.GetCurrentDirectory()); config.AddJsonFile("starship.json", false, true); }) .ConfigureLogging((hostingContext, logging) => { //日志的 默認記錄提供程序 //添加appsettings.json中關於日志的Logging節點配置 logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); //日志控制台記錄提供程序 logging.AddConsole(); //日志Debug記錄提供程序 logging.AddDebug(); //日志EventSource 記錄提供程序 logging.AddEventSourceLogger(); }) .UseStartup<Startup>();
默認項目模板調用 CreateDefaultBuilder 擴展方法,該操作將添加以上日志記錄提供程序(控制台,Debug,EventSource):
WebHost.CreateDefaultBuilder(args)
如果要自行選擇提供程序來替換默認提供程序。 可以調用 ClearProviders,然后再添加所需的提供程序。
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureLogging(logging => { logging.ClearProviders(); //只有日志控制台記錄提供程序 logging.AddConsole(); }) .Build();
1.2 創建日志
從 DI 中獲取 ILogger<TCategoryName> 對象。以下 Razor 頁面示例會創建日志“級別”為 Warning,“T類別”為 Page2Model,的日志:
public class Page2Model : PageModel { private readonly ILogger _logger; public Page2Model(ILogger<Page2Model> logger) { _logger = logger; } public void OnGet() { _logger.LogWarning("Load the Page2"); } }
如下所示(vs- -調試--窗口):

1.3 啟動Startup時創建日志
要將日志寫入 Startup 類,構造函數簽名需包含 ILogger 參數:
public class Startup { private readonly ILogger _logger; public Startup(IConfiguration configuration, ILogger<Startup> logger) { Configuration = configuration; _logger = logger; } }
1.4 在Program中創建日志
public static void Main(string[] args) { var host = BuildWebHost(args); var logger = host.Services.GetRequiredService<ILogger<Program>>(); logger.LogInformation("Seeded the database."); host.Run(); }
1.5 日志配置Configuration
日志記錄提供程序配置由一個或多個配置提供程序提供,它們可以是:
(1)文件格式(INI、JSON 和 XML)。
(2)命令行參數。
(3)環境變量。
(4)內存中的 .NET 對象。
(5)未加密的機密管理器存儲。
(6)加密的用戶存儲,如 Azure Key Vault。
(7)(已安裝或已創建的)自定義提供程序。
例如,日志記錄配置通常由應用設置文件的 Logging 節點部分提供。 以下示例應用了典型 appsettings.Development.json 文件的內容:
{ "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" }, "Console": { "IncludeScopes": true } } }
上面的配置文件不需要使用顯示加config.AddJsonFile,這個在環境章節已講過,當程序的環境(ASPNETCORE_ENVIRONMENT)是Development時,該文件中的Logging節點配置生效。
Logging 下的 LogLevel 屬性指定了用於記錄所選類別的最低級別,在本例中,System 和 Microsoft類別在 Information 級別記錄,其他均在 Debug 級別記錄。
Logging 下的其他屬性均指定了日志記錄提供程序。 本示例針對控制台提供程序。 如果提供程序支持日志作用域,則 IncludeScopes 將指示是否啟用這些域.
1.6 日志級別
每個日志都指定了一個 LogLevel 值。 日志級別指示嚴重性或重要程度。如果LogLevel是Warning級別,那么跟蹤Trace ,Debug ,Information 級別將不會記錄。
ASP.NET Core 定義了以下日志級別(按嚴重性從低到高排列):
(1) 跟蹤Trace = 0
(2) 調試Debug = 1
(3) 信息 Information = 2
(4) 警告 Warning = 3
(5) 錯誤 Error = 4
(6) 嚴重 Critical = 5
1.7 內置日志記錄提供程序
(1) 控制台
logging.AddConsole(); dotnet run 查看控制台日志記錄輸出。
(2) 調試
logging.AddDebug(); 在 Linux 中,此提供程序將日志寫入 /var/log/message。
(3) EventSource
logging.AddEventSourceLogger(); 在 Windows 中,它使用 PerfView 實用工具收集和查看日志,但尚無支持 Linux 或 macOS 的事件集合和顯示工具。
(4) EventLog
logging.AddEventLog();向 Windows 事件日志發送日志輸出。
(5) TraceSource
logging.AddTraceSource(sourceSwitchName);應用必須在 .NET Framework(而非 .NET Core)上運行。
1.8 第三方日志記錄提供程序
適用於 ASP.NET Core 的第三方日志記錄框架,鏈接地址官方文檔中有:
elmah.io(GitHub 存儲庫)
Gelf(GitHub 存儲庫)
JSNLog(GitHub 存儲庫)
KissLog.net(GitHub 存儲庫)
Loggr(GitHub 存儲庫)
NLog(GitHub 存儲庫)
Sentry(GitHub 存儲庫)
Serilog(GitHub 存儲庫)
Stackdriver(Github 存儲庫)
例如使用NLog:
NLog是一個靈活的免費日志記錄平台,適用於各種.NET平台,包括.NET標准。NLog可以輕松寫入多個 目標。(數據庫,文件,控制台)並即時更改日志記錄配置。
總結:
這篇主要講了asp.net core內置的日志提供程序, 內置的日志自帶功能還是有限,比如不能寫入到.txt文件或數據庫中。在項目使用中還是要考慮使用第三方日志提供程序。本篇對於內置的日志提供程序還有:日志消息模板、日志作用域、Azure 中的日志記錄、日志事件 ID等未介紹,具體再參考官方文檔。
參考文獻
官方資料:asp.net core 日志
