译文连接: 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