首页 > 解决方案 > 遍历在 Serilog 中注册的所有接收器和浓缩器

问题描述

如何遍历在 Serilog 中注册的所有接收器(ILogEventSink对象)或丰富器(对象)?ILogEventEnricher我正在使用Serilog.AspNetCore.

谢谢。

所以,我幼稚的想法是:在 Emit 操作中,我必须调用需要设置当前 HttpContext 的第三方服务。似乎 Emit 操作在没有分配 HttpContext 的后台线程上运行。所以在 Emit 操作中,我想解析 IHttpContextAccesor 服务并设置它的 HttpContext 属性。然后我可以调用需要设置 HttpContext 的第三方服务,一切都会好起来的。我将获得的当前 httpContext 实例位于我的自定义中间件中,而这里就是我想将 httpContext 实例注入Sink 实例(到它的 [ThreadStatic] 字段)以完成上述场景的地方。

另一种方法是在每个 http 请求的中间件中重新创建所有 Serilog(及其 Sink),并将 httpContext 作为参数传递给它的构造函数。昂贵的。

标签: serilogsink

解决方案


Serilog 不支持这种情况。


推荐阅读