添加 Serilog 包引用
$ dotnet add package Serilog.AspNetCore
$ dotnet add package Serilog.Sinks.Async
通过上方指令我们添加了以下两个包:
Serilog.AspNetCore
Serilog.AspNetCore 是基于 Serilog 框架的一个扩展库,用于在 ASP.NET Core 应用程序中使用 Serilog 来记录日志。它提供了一些方便的方法来集成 Serilog 框架到 ASP.NET Core 应用程序中,并支持从请求上下文中自动提取一些默认的日志信息,例如 HTTP 请求方法、路径和响应状态码等。通过使用 Serilog.AspNetCore,您可以轻松地将高质量日志记录添加到您的 ASP.NET Core 应用程序中。
Serilog.Sinks.Async
Serilog.Sinks.Async 是 Serilog 库中的一个 sinks 扩展,用于异步地将日志事件写入目标存储。通过使用 Serilog.Sinks.Async,您可以避免在应用程序中引入 IO 操作的性能损失,从而提高应用程序的整体性能。
配置
Serilog 支持使用 appsettings.json 进行配置
在 appsettings.json 根节点下新增 Serilog
节点来配置 Serilog
{
"Serilog": {
// 引用的 Serilog 的 sink,这里使用了 console、file、async 三种
"Using": ["Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Async"],
// Serilog 对于不同的 logger 进行最小记录级别的配置
"MinimumLevel": {
// 默认为 Information
"Default": "Information",
"Override": {
// 对于 Microsoft 和 System 命名空间下的 logger,级别为 Warning
"Microsoft": "Warning",
"System": "Warning"
}
},
// 日志输出配置
"WriteTo": [
// 将日志输出到 Console
{ "Name": "Console" },
// 将日志输出到 File,同时使用 Async wrapper,可以让日志以异步方式写入文件
{
"Name": "Async", // 使用 Async wrapper 提高日志写入文件性能
"Args": {
"configure": [
{
"Name": "File",
"Args": {
"path": "Logs/log.txt",
"rollingInterval": "Day", // 文件按天拆分
"fileSizeLimitBytes": 104857600, // 最大文件大小 100M
"rollOnFileSizeLimit": true, // 如果文件达到了允许的最大尺寸,也拆分
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact" // 格式化器,紧凑的 Json 压缩
}
}
]
}
}
],
// 日志数据的增强部分,这里的意思是将 LogContext 中的数据添加到日志数据里,LogContext 类似于一个堆栈,记录了一些自定义的环境数据,如 ASP.NET Core 的 HttpContext 信息,异常信息等等
"Enrich": ["FromLogContext"]
}
}
接管 ASP.NET Core 默认日志
使用 Serilog 接管 ASP.NET Core 的日志很简单,只需要在 Program.cs 中添加一行代码
builder.Host.UseSerilog((context, services, configuration) => configuration.ReadFrom.Configuration(context.Configuration));
该代码会从 appsettings.json 中读取 Serilog 配置并使用 Serilog 日志提供程序,这得利于.NET Core 中优秀的日志接口设计
结束
至此,ASP.NET Core 使用 Serilog 记录日志就配置结束了
如果以后需要使用其他的日志记录提供程序,也是按照同样的步骤:
- 添加对应的 Nuget 包引用
- 编写对应的日志记录提供程序配置文件
- 接管 ASP.NET Core 日志