我使用的是Serilog,还有一个名为CorrelationId
的ASP.NET Core中间件,它基本上用在TraceIdentifier
头中读取的值来更改X-Correlation-ID
。
我可以看到HttpContext.TraceIdentifier
的值已更改并且一直存在,但是Serilog仍在记录更改前的值。使用Serilog,其他所有功能都可以正常工作,只是此值保持其旧状态(看起来像这样:0HLLP1A57HHG6:00000001
)。
这是我的Program.cs:
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://0.0.0.0:5000")
.ConfigureLogging((hostingContext, logging) =>
{
var env = hostingContext.HostingEnvironment;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(hostingContext.Configuration)
.CreateLogger();
Log.Information("Starting for environment {env}", env.EnvironmentName);
})
.Build();
}
我正在像这样在控制器中使用记录器:
private readonly ILogger<ValuesController> _loggerService;
public ValuesController(ILogger<ValuesController> logger)
{
_loggerService = logger;
}
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
_loggerService.LogInformation("Test");
return new string[] { "value1", "value2" };
}