如何在ASP.Net Core中使用Serilog
記錄日志的一個(gè)作用就是方便對(duì)應(yīng)用程序進(jìn)行跟蹤和排錯(cuò)調(diào)查,在實(shí)際應(yīng)用上都是引入 日志框架,但如果你的 日志文件 包含非結(jié)構(gòu)化的數(shù)據(jù),那么查詢起來將是一個(gè)噩夢(mèng),所以需要在記錄日志的時(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 和你能想到的各種 存儲(chǔ)系統(tǒng),這篇文章我們將會(huì)討論如何在 ASP.Net Core 中使用 Serilog。
安裝 Serilog
使用 Visual Studio 新建 ASP.Net Core 項(xiàng)目,接下來從 NuGet 上拉幾個(gè)包,具體如下:
- Serilog
這個(gè)包提供了對(duì)基本的結(jié)構(gòu)化日志的功能支持。
- Serilog.AspNetCore
這個(gè)包提供了 Serilog 對(duì) AspNetCore 的支持。
- Serilog.Settings.Configuration
這個(gè)包打通了 Serilog 和 Configuration ,這樣你就可以直接從 appsettings.json 中讀取配置。
- Serilog.Sinks.Console
Console接收器顧名思義就是將 Serilog 的日志輸出到 Console。
- Serilog.Sinks.RollingFile
實(shí)現(xiàn)了對(duì) 滾動(dòng)文件 的支持。
使用 Serilog Sink
Serilog 利用 sink 特性將日志送到不同的地方,比如:text文件,數(shù)據(jù)庫(kù),甚至是 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è)日志級(jí)別,如:verbose, debug, information, warning, error 和 fatal。
有時(shí)候?yàn)榱苏{(diào)試目的,將日志送到 Console 是一個(gè)好辦法,但將程序部署到生產(chǎn)之后,更通用的做法就是將日志記錄到文件中,這樣方便在生產(chǎn)上實(shí)時(shí)查看并做一定程度的日志分析,剛好這里的 Serilog.Sink.RollingFile 支持對(duì)滾動(dòng)文件的支持,下面的代碼片段展示了如何通過編程的方式將日志送到文件中。
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ò)展方法來啟動(dòng) Serilog,這樣就做好了 Serilog 的替換工作,接下來可以在 Controller 中通過依賴注入的方式獲取 logger 實(shí)例,如下代碼所示:
public IActionResult Index()
{
logger.LogInformation("hello world");
return View();
}

日志是一個(gè)應(yīng)用程序不可或缺的一部分,所以選擇一款 靈活 + 簡(jiǎn)單 的日志框架就顯得特別重要了,Serilog 提供了低配置和易使用的特性讓我們方便的將日志送到各個(gè)地方。
以上就是如何在ASP.Net Core中使用Serilog的詳細(xì)內(nèi)容,更多關(guān)于ASP.Net Core 中使用 Serilog的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
.NET中彈性和瞬時(shí)處理庫(kù)Polly的使用詳解
Polly 是一個(gè) .NET 彈性和瞬態(tài)故障處理庫(kù),允許開發(fā)人員以 Fluent 和線程安全的方式來實(shí)現(xiàn)重試、斷路、超時(shí)、隔離和回退策略,下面就跟隨小編一起來看看它的具體使用吧2024-01-01
ASP.NET 程序中刪除文件夾導(dǎo)致session失效問題的解決辦法分享
這篇文章主要介紹了ASP.NET 程序中刪除文件夾導(dǎo)致session失效問題的解決辦法分享,有需要的朋友可以參考一下2013-12-12
.net6簡(jiǎn)單使用NPOI讀取Excel的項(xiàng)目實(shí)踐
本文主要介紹了.net6簡(jiǎn)單使用NPOI讀取Excel的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
asp.net 根據(jù)漢字的拼音首字母搜索數(shù)據(jù)庫(kù)(附 LINQ 調(diào)用方法)
我們經(jīng)常需要使用拼音首字母來檢索數(shù)據(jù)庫(kù),特別是應(yīng)用于醫(yī)院、商店等行業(yè)軟件中。譬如搜索“zgr”就可以搜索所有包含“中國(guó)人”的記錄。那么如果來實(shí)現(xiàn)才能即高效又方便呢?2010-04-04
asp.net DataTable相關(guān)操作集錦(篩選,取前N條數(shù)據(jù),去重復(fù)行,獲取指定列數(shù)據(jù)等)
這篇文章主要介紹了asp.net DataTable相關(guān)操作,包括篩選,取前N條數(shù)據(jù),去重復(fù)行,獲取指定列數(shù)據(jù)等.基本涵蓋了DataTable的常見操作技巧,需要的朋友可以參考下2016-06-06
請(qǐng)求如何進(jìn)入ASP.NET MVC框架
這篇文章主要介紹了請(qǐng)求如何進(jìn)入ASP.NET MVC框架的實(shí)現(xiàn)過程,感興趣的小伙伴們可以參考一下2016-04-04

