如何在ASP.Net Core中使用Serilog
記錄日志的一個(gè)作用就是方便對應(yīng)用程序進(jìn)行跟蹤和排錯(cuò)調(diào)查,在實(shí)際應(yīng)用上都是引入 日志框架,但如果你的 日志文件 包含非結(jié)構(gòu)化的數(shù)據(jù),那么查詢起來將是一個(gè)噩夢,所以需要在記錄日志的時(shí)候采用結(jié)構(gòu)化方式。
將日志結(jié)構(gòu)化可以更容易的查詢和分析,做法就是在寫入的時(shí)候定義好數(shù)據(jù)的格式,這種格式包括:xml,json,或者你希望轉(zhuǎn)成的任何結(jié)構(gòu)。
Serilog 是一個(gè)第三方,開源的結(jié)構(gòu)化日志框架,它的高層封裝可以讓開發(fā)者更容易的將日志記錄到 console,file 和你能想到的各種 存儲系統(tǒng),這篇文章我們將會討論如何在 ASP.Net Core 中使用 Serilog。
安裝 Serilog
使用 Visual Studio 新建 ASP.Net Core 項(xiàng)目,接下來從 NuGet 上拉幾個(gè)包,具體如下:
- Serilog
這個(gè)包提供了對基本的結(jié)構(gòu)化日志的功能支持。
- Serilog.AspNetCore
這個(gè)包提供了 Serilog 對 AspNetCore 的支持。
- Serilog.Settings.Configuration
這個(gè)包打通了 Serilog 和 Configuration ,這樣你就可以直接從 appsettings.json 中讀取配置。
- Serilog.Sinks.Console
Console接收器顧名思義就是將 Serilog 的日志輸出到 Console。
- Serilog.Sinks.RollingFile
實(shí)現(xiàn)了對 滾動文件 的支持。
使用 Serilog Sink
Serilog 利用 sink 特性將日志送到不同的地方,比如:text文件,數(shù)據(jù)庫,甚至是 ElasticSearch 中,換句話說,sink 特性可以把日志送到它該去的地方,當(dāng)所有的 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 支持多個(gè)日志級別,如:verbose, debug, information, warning, error 和 fatal。
有時(shí)候?yàn)榱苏{(diào)試目的,將日志送到 Console 是一個(gè)好辦法,但將程序部署到生產(chǎn)之后,更通用的做法就是將日志記錄到文件中,這樣方便在生產(chǎn)上實(shí)時(shí)查看并做一定程度的日志分析,剛好這里的 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 中內(nèi)置了 Logger 組件,這一節(jié)中我們一起看看如何使用 Serilog 將其進(jìn)行替換,在 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() 擴(kuò)展方法來啟動 Serilog,這樣就做好了 Serilog 的替換工作,接下來可以在 Controller 中通過依賴注入的方式獲取 logger 實(shí)例,如下代碼所示:
public IActionResult Index() { logger.LogInformation("hello world"); return View(); }
日志是一個(gè)應(yīng)用程序不可或缺的一部分,所以選擇一款 靈活 + 簡單 的日志框架就顯得特別重要了,Serilog 提供了低配置和易使用的特性讓我們方便的將日志送到各個(gè)地方。
以上就是如何在ASP.Net Core中使用Serilog的詳細(xì)內(nèi)容,更多關(guān)于ASP.Net Core 中使用 Serilog的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Asp.net SignalR創(chuàng)建實(shí)時(shí)聊天應(yīng)用程序
這篇文章主要介紹了Asp.net SignalR創(chuàng)建實(shí)時(shí)聊天應(yīng)用程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Server Application Unavailable出現(xiàn)的原因及解決方案小結(jié)
今天在服務(wù)器安裝了個(gè).net 4.0 framework(原本有1.0和2.0的),配置好站點(diǎn)后,選擇版本為4.0,訪問出錯(cuò),asp.net經(jīng)常會出現(xiàn)這個(gè)問題,這里腳本之家簡單的給整理下2012-05-05asp.net中DBNull.Value,null,String.Empty區(qū)別淺析
這篇文章來給大家介紹asp.net中DBNull.Value,null,String.Empty區(qū)別淺析,有需要的同學(xué)可以參考一下2013-08-08在 .NET 項(xiàng)目中復(fù)制資源文件夾到生成目錄的方法
本文主要介紹在使用 Visual Studio 進(jìn)行調(diào)試和發(fā)布時(shí),如何在 .NET 項(xiàng)目中復(fù)制資源文件夾到生成目錄,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03The remote procedure call failed and did not execute的解決辦法
打開IIS隨便訪問一個(gè).asp文件,提示The remote procedure call failed and did not execute2009-11-11System.Web中不存在類型或命名空間名稱script 找不到System.Web.Extensions.dll引用
這篇文章主要為大家詳細(xì)介紹了System.Web中不存在類型或命名空間名稱script,找不到System.Web.Extensions.dll引用的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04.NET分布式Orleans計(jì)時(shí)器和提醒功能實(shí)現(xiàn)
Timer是一種用于創(chuàng)建定期粒度行為的機(jī)制,與標(biāo)準(zhǔn)的.NET System.Threading.Timer類相似,Orleans 的 Timer允許在一段時(shí)間后執(zhí)行特定的操作,或者在特定的時(shí)間間隔內(nèi)重復(fù)執(zhí)行操作,這篇文章主要介紹了.NET分布式Orleans?計(jì)時(shí)器和提醒,需要的朋友可以參考下2024-03-03在運(yùn)行時(shí)編輯代碼的 .NET 熱重載的操作方法
今天通過本文給大家分享 Visual Studio 2019 中 16.11(預(yù)覽版1)中的 .NET 熱重載(通過 .NET 6(預(yù)覽版4)中的 dotnet watch 命令行工具),介紹什么是 .NET 熱重載,如何使用這個(gè)特征,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧2021-07-07ASP.NET Core 2.1 使用Docker運(yùn)行的方法步驟
這篇文章主要介紹了ASP.NET Core 2.1 使用Docker運(yùn)行的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07