java - 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 ,这将非常昂贵并且可能不值得。更不用说这种方法不仅会影响您定义的反应步骤,还会影响任何其他库/框架。
该建议的存在是有原因的:更好的控制、更少的影响和更明确的方法。
推荐阅读
- c# - 无法将类型“事务”隐式转换为 System.Collection.GenericList
- python - 训练损失减少,而开发损失增加
- azure-service-fabric - 来自 Reliable Actors 的邮箱中的消息是否有状态?
- python - Pandas,Python:如何在满足第二个条件的同时获得跨列的最大值
- c# - 如何在 Unity 中创建 360 度渲染纹理?
- wordpress-rest-api - WP REST Api 将帖子发布到远程 wordpress 网站
- php - 在另一个'中使用“with()”获取特定列
- python - Python - Dataframe - 将列数据拆分为新列 - 解释一些代码的含义
- php - 如何在 PHP 登录脚本中验证来自 SQL 的串联?
- xml - 未能检索到正确的节点数据