一.概述 ASP.NET Core 支持適用於各種內置和第三方日誌記錄, 供程式的日誌記錄 API,本文介紹瞭如何將日誌記錄 API 與內置提供程式一起使用。對於第三方日誌記錄提供程式使用,文章最後有鏈接。 1.1 添加內置日誌提供程式 日誌記錄提供程式能夠用於顯示日誌信息或存儲日誌,比如控制台提供 ...
一.概述
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 日誌