Serilog.Enrichers.ClientInfo 不记录请求标头

问题描述 投票:0回答:1

我在两个 dotNet Core 6 Web api 中使用 Serilog.Enrichers.ClientInfo 作为 Serilog 丰富器。两个 api 都具有相同的 Serilog 包引用,都具有相同的 Serilog 配置。第一个 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 客户端 IP:相关 ID:标头名称:用户:CONTROLLER-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、相关性和测试标头存在(或为空)):

[11:39:34] INF 客户端 IP:::1 相关 ID: null 标头名称: localhost:7082 用户: null CONTROLLER-2 测试日志

两个 API 都引用了这些包:

我只是不明白为什么第一个 api 没有通过请求中存在的标头来丰富。任何帮助将不胜感激。

谢谢。

.net-core logging asp.net-core-webapi serilog
1个回答
0
投票

天啊。如果有人偶然发现这一点 - 不要忘记添加 builder.Services.AddHttpContextAccessor();在你的 DI 中。我花了 2 天时间编写自定义日志丰富器来了解发生了什么:)

© www.soinside.com 2019 - 2024. All rights reserved.