UseSerilogRequestLogging()方法失效问题求助
问题分析与修复方案
核心问题
- 无请求触发:你的代码仅配置了日志中间件,但没有定义任何API端点/路由,没有请求进入应用,自然不会生成请求日志。
- 日志级别配置缺失:未明确设置全局最小日志级别,也未对
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
相关产品推荐
相关产品推荐

