提问人:lasjan 提问时间:11/15/2023 更新时间:11/15/2023 访问量:26
Serilog.Enrichers.ClientInfo 未记录请求标头
Serilog.Enrichers.ClientInfo not logging request headers
问:
我在两个 dotNet Core 6 Web API 中使用 Serilog.Enrichers.ClientInfo 作为 Serilog 扩充器。两个 API 都具有相同的 Serilog 软件包引用,并且都具有相同的 Serilog 配置。一个 api 是 loggnig 标头正确,第二个 api 不是。这里可能有什么问题?
Api 1 配置:
var loggers = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss}] {Level:u3} CLient IP: {ClientIp} Correlation Id: {CorrelationId} header-name: {Host} user: {UserName} {Message:lj}{NewLine}{Exception}")
.Enrich.WithClientIp()
.Enrich.WithCorrelationId()
.Enrich.WithRequestHeader("Host")
.Enrich.WithRequestHeader("UserName")
.Enrich.WithRequestHeader("another-header-name", "SomePropertyName")
.CreateLogger();
builder.Host.UseSerilog(loggers);
//
var app = builder.Build();
app.UseSerilogRequestLogging();
Api 1 控制器测试:
public async Task<IActionResult> Get(int id)
{
logger.LogInformation("CONTROLLER-1 TEST LOG");
var getExamCommand = new GetExamQuery { Id = id };
var exam = await mediator.Send(getExamCommand);
return Ok(exam);
}
Api 1 日志(缺少 Ip、相关和测试标头名称):
[11:39:50] INF CLient IP:相关 ID:标头名称:用户:控制器 1 测试日志
Api 2 配置:
var loggers = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss}] {Level:u3} CLient IP: {ClientIp} Correlation Id: {CorrelationId} header-name: {Host} user: {UserName} {Message:lj}{NewLine}{Exception}")
.Enrich.WithClientIp()
.Enrich.WithCorrelationId()
.Enrich.WithRequestHeader("Host")
.Enrich.WithRequestHeader("UserName")
.Enrich.WithRequestHeader("another-header-name", "SomePropertyName")
.CreateLogger();
builder.Host.UseSerilog(loggers);
Api 2 控制器测试:
public async Task<LoginUserDetails> GetUser(int id)
{
logger.LogInformation("CONTROLLER-2 TEST LOG");
return await userService.Get(id);
}
Api 2 日志(存在 Ip、correlaion 和 test 标头(或 null)):
[11:39:34] INF CLient IP: ::1 相关 ID: null 标头名称: localhost:7082 用户: null CONTROLLER-2 测试日志
两个 API 都引用了这些包:
我只是想不通为什么第一个 api 没有用请求中存在的标头来丰富。任何帮助将不胜感激。
谢谢。
答:
0赞
lasjan
11/15/2023
#1
我的天啊。如果有人会偶然发现这一点 - 不要忘记添加构建器。Services.AddHttpContextAccessor();在你的 DI 中。我花了 2 天时间编写自定义日志丰富器来了解发生了什么:)
评论