<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在 ASP.Net Core 中使用 Serilog

          共 2688字,需瀏覽 6分鐘

           ·

          2021-02-03 07:57


          記錄日志的一個(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 和你能想到的各種?存儲(chǔ)系統(tǒng),這篇文章我們將會(huì)討論如何在 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)了對?滾動(dòng)文件?的支持。

          使用 Serilog Sink

          Serilog 利用 sink 特性將日志送到不同的地方,比如:text文件,數(shù)據(jù)庫,甚至是 ElasticSearch 中,換句話說,sink 特性可以把日志送到它該去的地方,當(dāng)所有的 nuget 包都安裝好了之后,下面的代碼片段展示了如何將日志送到 console 中。


          ????????public?HomeController(ILogger?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?支持對滾動(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();
          ????????????????});
          ????}


          從上面的代碼中可以看到,我在 CreateHostBuilder 中使用了?UseSerilog()?擴(kuò)展方法來啟動(dòng) Serilog,這樣就做好了 Serilog 的替換工作,接下來可以在 Controller 中通過依賴注入的方式獲取 logger 實(shí)例,如下代碼所示:


          ????????public?IActionResult?Index()
          ????????{
          ????????????logger.LogInformation("hello?world");

          ????????????return?View();
          ????????}

          日志是一個(gè)應(yīng)用程序不可或缺的一部分,所以選擇一款?靈活?+?簡單?的日志框架就顯得特別重要了,Serilog 提供了低配置和易使用的特性讓我們方便的將日志送到各個(gè)地方。

          譯文鏈接:https://www.infoworld.com/article/3314985/how-to-use-serilog-in-aspnet-core.html



          往期精彩回顧




          【推薦】.NET Core開發(fā)實(shí)戰(zhàn)視頻課程?★★★

          .NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門篇-開篇及總體規(guī)劃

          【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開篇及目錄索引

          Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)

          .NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了

          10個(gè)小技巧助您寫出高性能的ASP.NET Core代碼

          用abp vNext快速開發(fā)Quartz.NET定時(shí)任務(wù)管理界面

          在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度

          現(xiàn)身說法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化

          關(guān)于C#異步編程你應(yīng)該了解的幾點(diǎn)建議

          C#異步編程看這篇就夠了


          瀏覽 34
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品三级片在线观看 | 日韩一级片在线 | 无码一区二区三区四 | 人妻中文在线 | 免费日皮视频在线观看 |