为什么 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。更详细的解释可以在下面的链接中找到。
我有一个将数据存储到 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。更详细的解释可以在下面的链接中找到。