You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ASP.NET Core健康检查与Serilog避免冗余日志事件

正确的中间件与健康检查配置顺序

核心配置步骤(Program.cs)

  1. 先配置Serilog宿主集成
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((context, config) => 
{
    config.ReadFrom.Configuration(context.Configuration)
          .Enrich.FromLogContext()
          .WriteTo.Console();
});
  1. 构建应用后添加基础中间件
var app = builder.Build();

// 异常处理等基础中间件
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}
  1. 添加Serilog请求日志中间件(关键:放在路由中间件之前)
app.UseSerilogRequestLogging(options =>
{
    // 过滤健康检查请求,避免生成无用日志
    options.GetLevel = (httpContext, elapsed, ex) => 
    {
        if (httpContext.Request.Path.StartsWithSegments("/health"))
        {
            return Serilog.Events.LogEventLevel.Verbose; // 低级别日志默认不输出
        }
        return Serilog.Events.LogEventLevel.Information;
    };
});
  1. 添加路由与授权中间件
app.UseRouting();
app.UseAuthorization();
  1. 最后配置健康检查端点(使用MapHealthChecks)
app.MapHealthChecks("/health");
// 其他业务端点配置,如MapControllers()、MapRazorPages()等

为什么要这样排序?

  • UseSerilogRequestLogging放在UseRouting之前,能完整捕获请求的路由上下文信息,同时方便我们通过请求路径识别健康检查请求,直接过滤掉无用日志。
  • MapHealthChecks作为端点配置,必须放在UseRouting和UseAuthorization之后,符合ASP.NET Core端点路由的规范,确保健康检查请求能被正确路由处理,避免出现未授权或路由匹配失败的错误日志。

额外优化:彻底排除健康检查日志

如果不想让健康检查请求的日志进入Serilog管道,还可以在Serilog配置中直接添加过滤规则:

builder.Host.UseSerilog((context, config) => 
{
    config.ReadFrom.Configuration(context.Configuration)
          .Enrich.FromLogContext()
          .Filter.ByExcluding(logEvent => 
              logEvent.Properties.ContainsKey("RequestPath") && 
              logEvent.Properties["RequestPath"].ToString().Contains("/health"))
          .WriteTo.Console();
});

内容的提问来源于stack exchange,提问作者lonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:55:06