如何在反应式编程中添加日志

问题描述

public ObjectNode addLabelColorCodes(ObjectNode objectNode) {
        Map<String,String> lablesMap = new ConcurrentHashMap<>();
       if (!AList.isEmpty()) {
                String joinedIds = StringUtils.join(AList,",");
                LOGGER.info("join Ids are {}",joinedIds);

               return Client.getLabelsById(joinedIds).doOnNext(response -> LOGGER.info("Labesl Response List:{}",response))
                       .flatMapIterable(response -> response.getobjects())
                        .doOnNext(Response -> {
                           objectNode.with("display").put(lablesMap.get(Response.getId()),Response.getLabel());
                       })
                        .then(Mono.just(objectNode))
                        .doOnNext(modified -> LOGGER.info("After Adding ObjectNode :{}",modified))
                        .onErrorReturn(objectNode)
                       .block();
            }
        }
        LOGGER.info("After Adding ObjectNode :{}",objectNode);
        return  objectNode;
    }@H_404_4@

如何在错误返回 .onErrorReturn(objectNode)

添加objectNode的日志记录

解决方法

您可以使用.doOnError()运算符执行不影响当前流的操作。即

                           .flatMapIterable(response -> response.getObjects())
                            .doOnNext(Response -> {
                               objectNode.with("display").put(lablesMap.get(Response.getId()),Response.getLabel());
                           })
                           .doOnError(throwable -> LOGGER.warn("Error encountered",))

进一步说明。在进行反应式编程时,请尽量牢记不变性。与其在doOnNext内部对ObjectNode对象进行变异,不如使用map / flatmap,在该映射中,您可以将Response Object转换为新的ObjectNode。