摘要:Serilog.AspNetCore是一个用于 ASP.NET Core 应用程序的日志库,它允许将日志消息通过 Serilog 路由,从而实现灵活的日志记录功能。
Serilog.AspNetCore是一个用于 ASP.NET Core 应用程序的日志库,它允许将日志消息通过 Serilog 路由,从而实现灵活的日志记录功能。
第一步,老规矩,安装Nuget包
dotnet add package Serilog.AspNetCoredotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File在Program.cs文件中,配置 Serilog 的日志记录器,并将其集成到 ASP.NET Core 的日志系统中:usingSerilog;
Log.Logger =newLoggerConfiguration
.MinimumLevel.Information// 设置日志的最低级别
.WriteTo.Console// 输出到控制台
.WriteTo.File("logs/myapp.log", rollingInterval: RollingInterval.Day)// 输出到文件
.CreateLogger;
try
{
Log.Information("Starting web application");
varbuilder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog;// 集成 Serilog 到主机
varapp = builder.Build;
//记录每个请求的摘要信息
app.UseSerilogRequestLogging;// 添加请求日志中间件
app.MapGet("/", => "Hello World!");
app.Run;
}
catch(Exception ex)
{
Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
//移除默认日志记录器,关闭应用程序时清理资源
Log.CloseAndFlush;
}UseSerilogRequestLogging在控制器或服务中注入并记录日志:publicclassHomeController:Controller
{
privatereadonlyILogger _logger;
publicHomeController(ILogger logger)
{
_logger = logger;
}
publicIActionResultIndex
{
_logger.LogInformation("Hello World!");
returnView;
}
}2. 使用 Serilog 的静态 Log 类
直接使用 Serilog 的静态方法记录日志:
Log.Information("This is an information message.");Log.Error("This is an error message.");
Serilog.Sinks.Async用于 Serilog 的异步日志处理扩展,通过将日志写入操作委托给后台线程,减少日志调用对主线程的阻塞,从而提高应用程序的性能。
适用场景
• 高并发的日志记录场景
• 对性能要求较高的应用程序
• 日志存储可能受 I/O 瓶颈影响的场景(如文件日志)
1. 安装 Serilog.Sinks.Async
dotnet add package Serilog.Sinks.Async2. 在 Serilog 的配置中,使用 WriteTo.Async包装目标 Sink,使其运行在后台线程中。
usingSerilog;Log.Logger =newLoggerConfiguration
.WriteTo.Async(a => a.File("logs/myapp.log", rollingInterval: RollingInterval.Day))
.CreateLogger;
3. 配置缓冲区和丢弃行为
默认情况下,异步 Sink 的内存缓冲区大小为 10,000 条日志事件。如果缓冲区已满,后续的日志事件将被丢弃。可以通过bufferSize如果需要在缓冲区满时阻塞主线程,可以设置blockWhenFull参数为.WriteTo.Async(a => a.File("logs/myapp.log"), blockWhenFull: true)4. 监控日志缓冲区状态
Serilog.Sinks.Async 提供了IAsyncLogEventSinkInspector接口,用于监控缓冲区的使用情况。如,可以通过以下代码检查缓冲区是否接近满载:voidExecuteAsyncBufferCheck(IAsyncLogEventSinkInspector inspector){
varusagePct = inspector.Count *100/ inspector.BufferSize;
if(usagePct >50)
SelfLog.WriteLine("Log buffer exceeded {0:p0} usage (limit: {1})", usagePct, inspector.BufferSize);
}
来源:opendotnet
免责声明:本站系转载,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!