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

.NET 6 ASP.NET Core中Serilog日志不显示IP地址问题

解决Serilog JSON日志不显示客户端IP的问题

1. 确认安装必要的NuGet包

确保项目已安装以下包:

  • Serilog.AspNetCore(提供请求日志中间件)
  • Serilog.Enrichers.ClientInfo(提供客户端IP/UA的enricher)

2. 修正配置文件中的Enrich名称错误

appsettings.json里的"WithClientIP"和"WithClientAgent"大小写不符合Serilog扩展方法的命名规范,需改为驼峰格式:

"Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId", "WithClientIp", "WithClientAgent" ],

3. 添加Serilog请求日志中间件

在Program.cs的管道配置中,必须在UseRouting()之后、UseAuthorization()之前添加UseSerilogRequestLogging(),这是获取HttpContext中客户端IP的核心步骤:

var builder = WebApplication.CreateBuilder(args);

// 你的Serilog配置代码...

var app = builder.Build();

app.UseHttpsRedirection();
app.UseRouting(); 
app.UseSerilogRequestLogging(); // 关键中间件,顺序不能错
app.UseAuthorization();

app.MapControllers();

app.Run();

4. 简化Serilog代码配置(可选)

代码中重复配置了Enrich项,可统一移到配置文件管理,简化后的代码:

var logger = new LoggerConfiguration()
    .Enrich.FromLogContext()
    .ReadFrom.Configuration(builder.Configuration)
    .CreateLogger();

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);

5. 验证日志输出

重启项目后发起请求,查看JSON日志文件,应出现ClientIp和ClientAgent字段:

{
  "Timestamp": "2024-05-20T12:34:56.789Z",
  "Level": "Information",
  "Message": "HTTP GET /api/values responded 200 in 12.345 ms",
  "ClientIp": "192.168.1.100",
  "ClientAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...",
  // 其他日志字段...
}

核心原因说明

Serilog的客户端IP enricher依赖当前请求的HttpContext,UseSerilogRequestLogging()中间件负责将HttpContext中的信息注入日志上下文;同时配置文件中Enrich名称的大小写错误会导致enricher未被正确加载,这两个问题共同导致IP地址无法显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:45:29