【发布时间】:2022-02-02 01:35:39
【问题描述】:
我尝试了以下答案:
即这个:
options.EnrichDiagnosticContext = (diagnosticContext, httpContext) =>
{
// string body = your logic to get body from httpContext.Request.Body
diagnosticContext.Set("Body", body);
};
但在我的例子中,body 是一个空字符串。我从 httpContext 读取正文的代码基于此解决方案:
它可以在我为全局异常处理创建的自定义中间件中工作。但它不使用 Serilog。只是一些快速穷人通过 Newtonsoft 序列化进行结构化日志记录的方法。
我在 nuget 上找到了这个浓缩器:
不过好像已经过时了,从那以后Serilog语法也变了。
我还查看了这个相关的官方 Serilog 票,该票已关闭。
Serilog 本身不支持从 http 请求添加自定义属性的工作流程吗?引用他们的 github 仓库:
感谢您提出这个问题。我认为复制和修改https://github.com/serilog/serilog-aspnetcore/blob/dev/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs 将是最简单的方法(我同意这有点不幸
例如,如果请求有一个名为 PatientId 的字段,请记录该字段。因为有无数种方法可以从 http 上下文记录属性,所以可以要求开发人员提供该自定义方法。但是为此创建一个自定义中间件听起来有点矫枉过正。此外,多个中间件可能无法很好地协同工作。
有没有办法从 http 请求中记录自定义属性?我有自己的全局异常中间件,但不知道如何使它与 Serilog 一起工作。或任何其他选择。主要要求 - 应仅在出现错误时记录自定义属性。
【问题讨论】:
标签: c# .net-core asp.net-core-webapi serilog error-logging