与许多其他 .NET 库一样,Serilog 提供了将诊断日志输出到文件、控制台以及其他位置的功能。它易于设置,拥有简洁的 API,并且可以在最新的 .NET 平台之间进行移植。
官方网站:Serilog --- simple .NET logging with fully-structured events
1、安装Serilog
dotnet add package Serilog.AspNetCore
2、将Serilog配置信息添加到appsettings.json
在ASP .NET Core后端服务开发中,任何可配置的项我们都应该配置在appsettings.json文件中。
相关配置信息可查看网站:https://github.com/serilog/serilog-settings-configuration
cs
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "logs\\log.txt",
"rollingInterval": "Day"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
}
3、在Program.cs 文件中使用两阶段初始化方式配置Serilog
为了完全捕获程序启动过程中和启动完成后,所有异常日志信息。
第一步:CreateBootstrapLogger()
程序启动时会立即配置一个初始的"引导(bootstrap)"日志记录器,来记录程序启动过程中发生的异常日志。
cs
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day)
.CreateBootstrapLogger();
第二步:AddSerilog()
当程序加载完成后,使用appsettings.json文件中Serilog配置来替换引导日志记录器。
cs
builder.Services.AddSerilog((services, lc) =>
lc.ReadFrom.Configuration(builder.Configuration));
4、添加Serilog请求日志记录中间件
cs
app.UseSerilogRequestLogging();
5、完整代码
appsetting.json
{
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
},
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "File",
"Args": {
"path": "logs\\log.txt",
"rollingInterval": "Day"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]
}
}
Program.cs
cs
using Serilog;
using Serilog.Events;
namespace Common.Backend.WebApi
{
public class Program
{
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console()
.WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day)
.CreateBootstrapLogger();
try
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSerilog((services, lc) => lc.ReadFrom.Configuration(builder.Configuration));
var app = builder.Build();
app.UseSerilogRequestLogging();
app.Run();
}
catch(Exception ex)
{
Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
}
}