.Net Core3.0 日志 logging
多年的經驗,日志記錄是軟件開發的重要組成部分。沒有日志記錄機制的系統不是完善的系統。在開發階段可以通過debug附件進程進行交互調試,可以檢測到一些問題,但是在上線之后,日志的記錄起到至關重要的作用。它可使我們在系統出現問題之后,排查錯誤提供依據。
.NET Core3.0內置多種日志記錄程序,并且有第三方提供的日志記錄程序框架如:log4net,NLog,Serilog,elmah.io等。后面會介紹前三種日志框架如何與.NETcore3.0結合起來進行使用。
內置日志記錄提供程序
ASP.NET?Core 提供以下提供程序:
控制臺-可以在控制臺查看日志輸出
調試-vs工具 -》開始調試-》輸出窗口進行查看日志輸出
EventSource-可使用PerfView 實用工具收集和查看日志
EventLog-》僅在windows系統下可以使用事件查看器查看日志
TraceSource
AzureAppServicesFile
AzureAppServicesBlob
ApplicationInsights
創建使用日志
通用主機的應用程序和非主機應用程序使用的方式也是不同的。因為通用主機內部封裝了 依賴注入、logging、配置、IHostedService的實現;并且默認配置了控制臺,調試,EventSource以及EventLog(僅當在windows上運行時)提供程序。源碼如下
通用主機
添加提供程序
可自行選擇提供程序來替換默認提供程序。在CreateHostBuilder時候 調用ClearProviders(),然后添加所需的提供程序。我們創建一個api項目為例
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(logging => { logging.ClearProviders();//去掉默認添加的日志提供程序 logging.AddConsole(); logging.AddDebug(); logging.AddEventSourceLogger(); logging.AddEventLog(); //logging.AddTraceSource(); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })在 Web 應用或托管服務中,由依賴關系注入 (DI) 獲取 ILogger。
private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; //可以顯示指定類別名稱ILoggerFactory logger //logger.CreateLogger("WebApi.Controllers.WeatherForecastController"); }?
非主機控制臺
添加提供程序
在創建 LoggerFactory 時調用提供程序的 Add{provider name} 擴展方法:
在非主機控制臺應用中,使用 LoggerFactory 來創建 ILogger。
第三方日志框架
log4net,NLog和Serilog這3種日志記錄框架幾乎在.NET空間中占主導地位,不需要太多介紹。看看最近6周的下載排名就知道了。如圖
log4net 在NET Core 3.0使用
引用Log4net到項目中,安裝NuGet包
NLog 在NET Core 3.0使用
引用NLog到項目中,安裝NuGet包
NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();CreateHostBuilder方法添加
.UseNLog() //NLog: Setup NLog for Dependency injection使用 ?
Serilog 在NET Core 3.0使用
引用Serilog到項目中,安裝NuGet包
Main方法添加
小結:本文主要講解NET Core3.0內置的日志提供程序和與第三方日志框架(Log4net,Nlog,Serilog)的使用。
總結
以上是生活随笔為你收集整理的.Net Core3.0 日志 logging的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net Core 3.0 Identi
- 下一篇: .NET如何将字符串分隔为字符