【发布时间】:2020-10-28 14:11:30
【问题描述】:
我正在使用带有 asp net core 3 的 serilog
它是自动设置和记录异常 - 所以我没有错误处理来记录错误。
我试图为记录的项目添加额外的上下文属性,并添加了中间件来记录这些。
LogContext.PushProperty("Email", email);
LogContext.PushProperty("Url", url);
如果我手动记录自己,则会添加这些,但发生错误时自动添加的任何日志都没有添加这些项目。
有什么想法吗?
注意:我读过这个... https://blog.datalust.co/smart-logging-middleware-for-asp-net-core/ 这是我发现的最接近该问题的解决方法,但这会捕获异常并手动记录它,如果这是唯一可以完成的方法,那就太可惜了。
【问题讨论】:
-
类似的是,但希望我添加了更多细节。如果我发现错误并自己记录它,我的代码就可以工作 - 如果我记录信息或任何其他类型的日志,它就可以工作。什么不起作用是它没有为它自己记录的错误添加上下文项。正如我所读到的,它在不同的“上下文”或“从堆栈中弹出”,但这没有帮助,您会认为这是错误记录的基本要求吗?
-
绝对不是说这是一个重复(首先,这个问题被更直接地提出)。
LogContext.PushProperty/Enrich.FromLogContext肯定会在using和/或堆叠性的假设下工作;当进行 Logging 调用时(并且只能)捕获这些值(这要求它仍然在相同的上下文中,而不是展开所有内容并完成拆卸)。我还没有深入研究使用 asp.net 核心可以做的事情来存储上下文,以便它可以从这样的内部上下文传输到异常处理程序中间件,但对我来说那不是 Serilog 部门。 -
好的,所以我实施的是我猜的唯一解决方案。我有一个中间件类,它包装执行,捕获错误并手动记录它们,然后不重新抛出,所以不会调用自动错误记录)对我来说这是一种耻辱,因为事情看起来真的很好/有用,但这似乎对我来说就像一个黑客/解决方法
-
嗯,我很确定 DiagnosticContext 或其他东西可以将上下文从请求处理流向全局请求日志记录和全局异常日志记录。我仍然希望你能得到一个正确的答案。也不确定你是否知道most recent overview article by Nick covers ASP.NET Core 3
标签: asp.net-core serilog