当前位置: 首页 > 知识库问答 >
问题:

Spring WebClient-日志记录为2xxSuccessful HTTPStatus

陈富
2023-03-14

我正在使用Spring WebClient下载文件,如下所示:

private void dnloadFileAPI(String theId, String destination) {
        log.info("Downloading file.. " + theId);
        Flux<DataBuffer> dataBuffer = webClient
                .get()
                .uri("/some/fancy/" + theId + "/api")
                .retrieve()
                .onStatus(HttpStatus::is2xxSuccessful, response -> Mono.just(new CustomException("Success")))
                .bodyToFlux(DataBuffer.class);
        DataBufferUtils.write(dataBuffer, Paths.get(destination), StandardOpenOption.CREATE).share().block();
    }

文件下载得很好。我唯一挣扎的是,当响应为200时,我只想像这样记录一行:

log.info("{}", theId + " - File downloaded successfully")

我也试过了,但没有得到我想要的-如何记录Spring WebClient响应

简而言之,是否有某种方法可以在不编写单独的CustomException的情况下实现上述目标?在这里感到迷失和无知。这方面的任何指针都将受到高度赞赏。

共有1个答案

翟宏放
2023-03-14

我认为在body ToFlux(DataBuffer.class)行之后添加以下内容将是您需要的

.doOnComplete(() -> log.info("File downloaded successfully"))

像这样的

private void dnloadFileAPI(String theId, String destination) {
    log.info("Downloading file.. " + theId);
    Flux<DataBuffer> dataBuffer = webClient
        .get()
        .uri("/some/fancy/" + theId + "/api")
        .retrieve()
        .bodyToFlux(DataBuffer.class)
        .doOnComplete(() -> log.info("File downloaded successfully"));
    DataBufferUtils.write(dataBuffer, Paths.get(destination), StandardOpenOption.CREATE).share().block();
}
 类似资料:
  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 问题内容: 我正在考虑将Redis用于Web应用程序日志记录目的。我用谷歌搜索,有人将日志转储到Redis队列/列表中,然后将计划的工作人员转储到磁盘中。 http://nosql.mypopescu.com/post/8652869828/another-redis-use-case- centralized-logging 我希望寻求理解,为什么不直接使用Redis持久化到磁盘?如果我分配了一

  • logging 模块自 2.3 版以来一直是 Python 标准库的一部分。在 PEP 282 中有对它的简洁描述。除了 基础日志教程 之外,这些文档是非常难以阅读的。 日志记录一般有两个目的: 诊断日志 记录与应用程序操作相关的日志。例如,当用户遇到程序报错时, 可通过搜索诊断日志以获得上下文信息。 审计日志 为商业分析而记录的日志。从审计日志中,可提取用户的交易信息, 并结合其他用户资料构成用

  • 问题内容: 我在Spring 3.5容器中将JpaTransactionManager与hibernate3一起使用。我无法为JPA启用日志记录。我希望看到用于调试我的某些服务的事务管理日志。我正在使用log4j。 这是我的log4j.properties中的内容 问题答案: 在启用JPATransactionManager的日志记录方面,这对我有用:1.下载logback jar(logback

  • 主要内容:修改日志管理器配置每个初学者都很熟悉在有问题的代码中使用 System.out.println 方法在控制台打印消息,来帮助观察程序运行的操作过程。如果你使用  System.out.println 方法,一旦发现问题的根源,就要将这些语句从代码中删去。如果接下来又出现了问题,就需要再插入几个调用 System.out.println 方法的语句,如此反复,增加了工作量。 日志用来记录程序的运行轨迹,方便查找关键信

  • 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。 ASP.NET Core 应用程序 一旦使用了 AddDbContext 或 AddDbContextPool ,EF Core 就会自动集成 ASP.NET Core 的日志记录机制。因此,当使用 ASP.NET Core 的时候,日志记录的配置与 ASP.NET Core 帮助文档 中所描述的是一致的。 其他应用程序 EF Core

  • 配置 // 日志记录到文件 func LoggerToFile() gin.HandlerFunc { logFilePath := config.Log_FILE_PATH logFileName := config.LOG_FILE_NAME //日志文件 fileName := path.Join(logFilePath, logFileName)

  • 修改日志 2019-07-30 优化了 logger.go,日志新增了返回数据,见最新代码包。 配置 // 日志记录到文件 func LoggerToFile() gin.HandlerFunc { logFilePath := config.Log_FILE_PATH logFileName := config.LOG_FILE_NAME //日志文件 fil