如何在 ASP.Net Core 中使用 Serilog
記錄日志的一個作用就是方便對應用程序進行跟蹤和排錯調查,在實際應用上都是引入 日志框架,但如果你的 日志文件 包含非結構化的數據,那么查詢起來將是一個噩夢,所以需要在記錄日志的時候采用結構化方式。
將日志結構化可以更容易的查詢和分析,做法就是在寫入的時候定義好數據的格式,這種格式包括:xml,json,或者你希望轉成的任何結構。
Serilog 是一個第三方,開源的結構化日志框架,它的高層封裝可以讓開發者更容易的將日志記錄到 console,file 和你能想到的各種 存儲系統,這篇文章我們將會討論如何在 ASP.Net Core 中使用 Serilog。
安裝 Serilog
使用 Visual Studio 新建 ASP.Net Core 項目,接下來從 NuGet 上拉幾個包,具體如下:
Serilog
這個包提供了對基本的結構化日志的功能支持。
Serilog.AspNetCore
這個包提供了 Serilog 對 AspNetCore 的支持。
Serilog.Settings.Configuration
這個包打通了 Serilog 和 Configuration ,這樣你就可以直接從 appsettings.json 中讀取配置。
Serilog.Sinks.Console
Console接收器顧名思義就是將 Serilog 的日志輸出到 Console。
Serilog.Sinks.RollingFile
實現了對 滾動文件 的支持。
使用 Serilog Sink
Serilog 利用 sink 特性將日志送到不同的地方,比如:text文件,數據庫,甚至是 ElasticSearch 中,換句話說,sink 特性可以把日志送到它該去的地方,當所有的 nuget 包都安裝好了之后,下面的代碼片段展示了如何將日志送到 console 中。
public?HomeController(ILogger<HomeController>?logger){using?(var?logConfig?=?new?LoggerConfiguration().WriteTo.Console().CreateLogger()){logConfig.Information("This?is?a?test?data.");};_logger?=?logger;}值得注意的是,Serilog 支持多個日志級別,如:verbose, debug, information, warning, error 和 fatal。
有時候為了調試目的,將日志送到 Console 是一個好辦法,但將程序部署到生產之后,更通用的做法就是將日志記錄到文件中,這樣方便在生產上實時查看并做一定程度的日志分析,剛好這里的 Serilog.Sink.RollingFile 支持對滾動文件的支持,下面的代碼片段展示了如何通過編程的方式將日志送到文件中。
public?HomeController(){var?logger?=?new?LoggerConfiguration().MinimumLevel.Debug().WriteTo.RollingFile(@"e:\log.txt",?retainedFileCountLimit:?7).CreateLogger();for?(int?i?=?0;?i?<?byte.MaxValue;?i++){logger.Information($"log?{i}");}}使用 Serilog 替換原生的 Logger
在 ASP.NET Core 中內置了 Logger 組件,這一節中我們一起看看如何使用 Serilog 將其進行替換,在 Program.Main 方法中使用如下代碼:
public?class?Program{public?static?void?Main(string[]?args){Log.Logger?=?new?LoggerConfiguration().MinimumLevel.Debug().MinimumLevel.Override("Microsoft",?LogEventLevel.Information).Enrich.FromLogContext().WriteTo.Console().CreateLogger();try{Log.Information("Starting?web?host");CreateHostBuilder(args).Build().Run();}catch?(Exception?ex){Log.Fatal(ex,?"Host?terminated?unexpectedly");}finally{Log.CloseAndFlush();}}public?static?IHostBuilder?CreateHostBuilder(string[]?args)?=>Host.CreateDefaultBuilder(args).UseSerilog().ConfigureWebHostDefaults(webBuilder?=>{webBuilder.UseStartup<Startup>();});}從上面的代碼中可以看到,我在 CreateHostBuilder 中使用了 UseSerilog() 擴展方法來啟動 Serilog,這樣就做好了 Serilog 的替換工作,接下來可以在 Controller 中通過依賴注入的方式獲取 logger 實例,如下代碼所示:
public?IActionResult?Index(){logger.LogInformation("hello?world");return?View();}日志是一個應用程序不可或缺的一部分,所以選擇一款 靈活 + 簡單 的日志框架就顯得特別重要了,Serilog 提供了低配置和易使用的特性讓我們方便的將日志送到各個地方。
譯文鏈接:https://www.infoworld.com/article/3314985/how-to-use-serilog-in-aspnet-core.html
總結
以上是生活随笔為你收集整理的如何在 ASP.Net Core 中使用 Serilog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯急招.NET,但你准备好了吗?
- 下一篇: techempower拿分系列之aspc