微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Operators#lift:MDC 日志记录的好主意?

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?