譯文連接: https://www.infoworld.com/art...
記錄日誌是應用程序的一個基本功能點,日誌對於發現,排查,調試bug的時候特別有用,Serilog
是一個第三方開源的類庫,它能夠將日誌結構化的輸出到控制檯,文件 以及 若干個其餘類別的數據存儲中。html
本篇主要討論如何經過 Serilog 將結構化的日誌寫入到 Sql Server 中,要想運行本篇中的例子,你須要安裝一下 Visual Studio 2019。git
要把 Serilog 用起來,須要經過 NuGet 去安裝,有兩種方式能夠選擇,要麼使用 VS 中的 NuGet package manager
可視化界面,要麼在 NuGet package manager console
命令行窗口中鍵入以下命令。github
Install-Package Serilog Install-Package Serilog.AspNetCore Install-Package Serilog.Sinks.MSSqlServer Install-Package Serilog.Settings.Configuration
下面的代碼展現瞭如何將 Serilog 添加到 ASP.NET Core 中,能夠着重看一下使用 UseSerilog()
擴展方法將 Serilog 做爲 ASP.NET Core 默認的日誌框架。web
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog() .Build();
爲了在應用程序中展現 Serilog 的用法,下面是完整的代碼段,能夠着重看一下咱們是如何配置和構建 webhost 的。sql
public class Program { public static void Main(string[] args) { IConfigurationRoot configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build(); Log.Logger = new LoggerConfiguration().ReadFrom.Configuration (configuration).CreateLogger(); BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseSerilog() .Build(); }
爲了讓 UseSerilog()
可用,記得要引用一下 Serilog 命名空間。數據庫
using Serilog;
當用 Visual Studio 建立好 ASP.NET Core 項目時,appsettings.json
文件默認就建立好了,這個文件很重要,後續的數據庫鏈接串和其餘的一些配置信息都會在這裏配置,下面是完整的 appsettings.json
配置。json
{ "Serilog": { "MinimumLevel": "Information", "WriteTo": [ { "Name": "MSSqlServer", "Args": { "connectionString": "Data Source=LAPTOP-ULJMOJQ5;Initial Catalog=Research; User Id=joydip; Password=sa123#;", "tableName": "Log", "autoCreateSqlTable": true } } ] } }
應用程序會自動的生成table表,固然你也能夠手工的在數據庫中生成日誌表,若是要這麼作的話,可使用下面的腳本。app
CREATE TABLE [Log] ( [Id] int IDENTITY(1,1) NOT NULL, [Message] nvarchar(max) NULL, [MessageTemplate] nvarchar(max) NULL, [Level] nvarchar(max) NULL, [TimeStamp] datetimeoffset(7) NOT NULL, [Exception] nvarchar(max) NULL, [Properties] nvarchar(max) NULL CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED ([Id] ASC) )
當應用程序運行後,數據庫會生成一張 Log 表,同時 ASP.NET Core 會將日誌記錄到該表中,下面展現了已經被記錄到 log 表的日誌信息。框架
你可使用 依賴注入(DI) 的方式將 log實例注入到 Controller 中,以下代碼所示:測試
public class DefaultController : Controller { private readonly ILogger<DefaultController> _logger; public DefaultController(ILogger<DefaultController> logger) { _logger = logger; } }
下面的代碼片斷展現瞭如何利用 Serilog 在 Controller 下的 Action 中記錄日誌。
public class DefaultController : Controller { private readonly ILogger<DefaultController> _logger; public DefaultController(ILogger<DefaultController> logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("Hello World"); return View(); } }
雖然 Serilog 是獨立於 .NET Core,而且它是以插件的形式完美的介入到 ASP.NET Core 生態系統中,讓結構化的日誌更加容易,方便的被記錄,Serilog 能夠利用幾十種接收器將日誌發送到不一樣的 target 中,這些 target 包括:文本文件,數據庫,AWS,Azure 和 Google Could Service ,在這篇,我已經展現過了 Serilog 如何和 SQLServer 一塊兒協做,我將會在後續的文章中討論 Serilog 的更多高級特性。
更多高質量乾貨:參見個人 GitHub: dotnetfly