Serilog.AspNetCore 是一个用于 ASP.NET Core 应用程序的日志库,它允许将日志消息通过 Serilog 路由,从而实现灵活的日志记录功能。
一、安装必要的 NuGet 包
第一步,老规矩,安装Nuget包
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
二、配置 Serilog
1. 在 Program.cs
中配置 Serilog
在 Program.cs
文件中,配置 Serilog 的日志记录器,并将其集成到 ASP.NET Core 的日志系统中:
using Serilog;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information() // 设置日志的最低级别
.WriteTo.Console() // 输出到控制台
.WriteTo.File("logs/myapp.log", rollingInterval: RollingInterval.Day) // 输出到文件
.CreateLogger();
try
{
Log.Information("Starting web application");
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog(); // 集成 Serilog 到主机
var app = builder.Build();
//记录每个请求的摘要信息
app.UseSerilogRequestLogging(); // 添加请求日志中间件
app.MapGet("/", () => "Hello World!");
app.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
//移除默认日志记录器,关闭应用程序时清理资源
Log.CloseAndFlush();
}
UseSerilogRequestLogging
,可以记录每个请求的摘要信息
三、使用 Serilog 记录日志
1. 使用 ILogger
接口
在控制器或服务中注入 ILogger
并记录日志:
public classHomeController : Controller
{
privatereadonly ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Hello World!");
return View();
}
}
2. 使用 Serilog 的静态 Log
类
直接使用 Serilog 的静态方法记录日志:
Log.Information("This is an information message.");
Log.Error("This is an error message.");
四、异步日志处理(Serilog.Sinks.Async)
Serilog.Sinks.Async 用于 Serilog 的异步日志处理扩展,通过将日志写入操作委托给后台线程,减少日志调用对主线程的阻塞,从而提高应用程序的性能。
适用场景
- • 日志存储可能受 I/O 瓶颈影响的场景(如文件日志)
- 1. 安装 Serilog.Sinks.Async
dotnet add package Serilog.Sinks.Async
- 2. 在 Serilog 的配置中,使用
WriteTo.Async
包装目标 Sink,使其运行在后台线程中。
using Serilog;
Log.Logger = new LoggerConfiguration()
.WriteTo.Async(a => a.File("logs/myapp.log", rollingInterval: RollingInterval.Day))
.CreateLogger();