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

UseSerilogRequestLogging()方法失效问题求助

问题分析与修复方案

核心问题

  1. 无请求触发:你的代码仅配置了日志中间件,但没有定义任何API端点/路由,没有请求进入应用,自然不会生成请求日志。
  2. 日志级别配置缺失:未明确设置全局最小日志级别,也未对Microsoft.AspNetCore命名空间的日志做合理过滤,导致日志行为不符合预期。

修复步骤

1. 完善Serilog日志配置

修改LoggerConfiguration,明确日志级别规则,避免冗余日志同时确保请求日志能被记录:

var logger = new LoggerConfiguration()
    .MinimumLevel.Information() // 全局最小日志级别设为Information
    .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning) // 过滤ASP.NET Core的冗余Info日志
    .WriteTo.File("Logs.txt")
    .CreateLogger();
builder.Host.UseSerilog(logger);

2. 添加端点并调整中间件顺序

UseSerilogRequestLogging()必须放在路由、端点中间件之前,同时添加实际可访问的端点:

var app = builder.Build();

// 确保请求日志中间件在路由之前执行
app.UseSerilogRequestLogging();

// 添加测试端点(示例)
app.MapGet("/", () => "Hello World!");

app.Run();

3. (可选)自定义请求日志内容

如果需要更详细的请求上下文信息,可以扩展配置:

app.UseSerilogRequestLogging(options =>
{
    // 自定义日志消息模板
    options.MessageTemplate = "处理请求 {RequestPath},耗时 {Elapsed:0.000} ms";
    // 额外记录请求上下文字段
    options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
    {
        diagnosticContext.Set("请求主机", httpContext.Request.Host);
        diagnosticContext.Set("请求协议", httpContext.Request.Scheme);
    };
});

验证操作

启动应用后,访问http://localhost:<你的端口>/,打开Logs.txt就能看到UseSerilogRequestLogging()生成的请求日志了。

内容的提问来源于stack exchange,提问作者SHAKIR ALI KHAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:27:24