如何解决Operators#lift:MDC 日志记录的好主意?
Project Reactor 文档建议采用以下 MDC 日志模式:
.doOnEach(logonNext(r -> LOG.debug("found restaurant {} for ${}",r.getName(),r.getPricePerPerson())))
为了避免必须包装每个日志记录调用,自定义订阅者,在每个信号之前从 currentContext 填充 MDC,使用 Hooks.onEachOperator(Operators.lift(...)
) 添加是一个好主意吗?
我的主要关注点是:
1.) 在每个信号之前填充 MDC 的成本,即使没有发生日志记录。
2.) 算子融合:每个算子上的 Operators.lift(...)
是否有效地禁用了算子融合?尝试使用 StepVerifier#expectFusion
进行快速测试似乎表明了这一点。如果这是真的,在实践中这对性能有多大影响?
感谢任何输入!
解决方法
这是 Sleuth 最初采用的方法,通过 Hooks.onEachOperator
。但是,如果您只需要在反应式管道中的操作子集上进行日志记录/MDC,那么这非常成本很高,并且可能不值得。更不用说这种方法不仅会影响您定义的响应式步骤,还会影响任何其他库/框架。
提出建议是有原因的:更好的控制、更少的影响和更明确的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。