【发布时间】:2021-08-23 23:36:59
【问题描述】:
我最近在使用 SignalR 的 ASP.NET Core/.NET5 Web 应用程序中实现了 Serilog 日志记录。我正在使用 Elasticsearch 接收器,一切都按预期工作。我决定添加一些额外的 HttpContext 属性来记录每个请求,所以我在 StartUp.cs 中将调用扩展到 UseSerilogRequestLogging() 以丰富诊断上下文额外的属性(主要是因为这似乎是最简单的方法):
app.UseSerilogRequestLogging(options =>
{
options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
{
diagnosticContext.Set("HttpRequestClientIP", httpContext.Connection.RemoteIpAddress);
diagnosticContext.Set("UserName", httpContext.User?.Identity?.Name == null ? "(anonymous)" : httpContext.User.Identity.Name);
};
});
起初,这似乎按预期工作,直到我注意到它并不总是工作。我真的希望在所有写入的日志记录上记录额外的属性,并且当典型的 HTTP GET、HTTP POST 等发生时,它似乎可以在 Serilog 自动写入的日志记录上正常工作......但在我的 Signalr Hub 类中,我有几个地方我手动编写自己的日志记录,例如 Logger.Log(LogLevel.Information, "whatever.."),但这些记录中根本不存在这些额外的属性。
我在这里缺少什么?是不是因为在 Signalr Hub 中导致它们不可用?或者我的 Logger.Log() 调用可能有问题?
任何想法将不胜感激。 谢谢-
【问题讨论】:
标签: asp.net-core .net-5 serilog