为什么 Mono.doOnError 打印错误日志

Why does Mono.doOnError prints error logs

我有一个将数据存储到 couchbase 数组的功能。我在 couchbase 3.0 sdk 中使用反应式集合。

通过下面的示例,我能够存储数据,但我在日志中打印了 CasMismatchException。但由于这是预期的,我不想打印它,我该如何实现?

private Consumer<? super Throwable> upsert(String key, String value) {
    return e -> {
      if (e instanceof CasMismatchException || e instanceof DocumentExistsException) {

            defaultCollection // couchbase reactive default colection
            .get(key)
            .subscribe(
                s -> {
                  List<String> values = new ArrayList<>();
                  values.addAll(s.contentAs(ArrayList.class));
                    values.add(value);
                    defaultCollection
                        .replace(key, values, ReplaceOptions.replaceOptions().cas(s.cas()))
                        .doOnError(upsert(key,value))
                        .subscribe();
                });
      } else {
        LOGGER.error("Error on couch operation on - {}", e);
      }
    };
  }

此代码打印错误日志,我可以避免吗?

我使用Hooks.onErrorDropped解决了重复打印的错误。

 Hooks.onErrorDropped(error -> {
            logger.log(Level.WARNING, "Exception happened:", error);
        });

但正如评论中所建议的,您也可以使用 onErrorResume。我针对我的具体情况使用了 onErrorDropped。更详细的解释可以在下面的链接中找到。