繁体   English   中英

如何在 Java 项目反应器中记录管道?

[英]how to log pipelines in Java project reactor?

我已经启动了一个使用 java 反应器和 spring webFLux 的新项目。 最近我不得不调试一个生产错误,这是一场噩梦,因为他们没有记录任何东西。 因此,通过阅读我发现了两种开始向管道添加日志的方法。 一种是使用 .log(),另一种是使用 onErrorResume、doOnSubscribe、doOnSuccess。 你知道我应该使用哪一个吗? 是记录管道的更好方法吗?

    return repositoryName.findById(event.eventId())
        .filter(event -> event.completedDate() == null)
        .filterWhen(event ->
            externalService.getEventSummary(event.getUser().userId())
        .doOnNext(event -> log.info("Event found {} and should be marked as found", event.id()))

我强烈推荐 Reactor 文档来检查每个方法的作用https://projectreactor.io/docs/core/release/reference/

doOnNextdoOnErrordoOnSuccess被广泛用于执行阻塞操作而不会对当前 stream 产生副作用。如果您在doOnNextdoOnError上收到一个 Square object ,此方法将准确返回收到的 Square object(即使您更改了它的属性)

doOnNext在前一个序列完成后执行try-catch

doOnError如果抛出异常则后续执行(并且流上没有其他异常处理程序)

doOnSuccess类似于来自try-catch的 finally 块

onErrorResume最多用于在需要时处理异常,类似于 catch(Exception e),但它会返回一个新的 object

如您所见,可以在flatMapmapdoOnNextdoOnErroronErrorResume上记录日志。 正确使用的会因您的需要而异。 如果日志记录是您唯一需要的东西,我推荐doOnNextdoOnErrordoOnFinally

如前所述,请也参考文档以检查每种方法代表什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM