【问题标题】:Feign client log level intervene with pdf binary contentFeign客户端日志级别干预pdf二进制内容
【发布时间】:2020-07-22 07:20:46
【问题描述】:

目前低于日志级别的 pdf 文件正在正确下载

logging:
  level:
    root: ${SERVER_LOG_LEVEL:INFO}
    com:
      abc:
        feign: DEBUG

但以下一个配置文件已损坏

logging:
  level:
    root: ${SERVER_LOG_LEVEL:INFO}
    com:
      abc:
        feign: INFO

【问题讨论】:

    标签: spring spring-boot java-8 feign


    【解决方案1】:

    Feign 日志只响应 DEBUG 级别。

    对于每个 Feign 客户端,默认会创建一个记录器。

    我们可以为每个客户端配置的 Logger.Level 表示要记录多少:

    @Configuration
    public class ClientConfiguration {
        @Bean
        Logger.Level feignLoggerLevel() {
            return Logger.Level.BASIC;
        }
    }
    

    有四种日志记录级别可供选择:

    1. NONE – 不记录,这是默认设置
    2. BASIC – 仅记录请求方法、URL 和响应状态
    3. HEADERS - 将基本信息与请求和响应标头一起记录
    4. FULL - 记录请求和响应的正文、标头和元数据

    请阅读更多内容:https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html

    【讨论】:

      【解决方案2】:

      不确定这是否与您遇到的问题相同,但我们看到的症状完全相同:假装文件下载,在调试模式下工作,在 info/warn/error 下不工作。

      在调试模式下,feign 的 Logger.logAndRebufferResponse() 会在某个时刻被调用,读取响应的有效负载并将其重新打包成一个带有 ByteArrayInputStream 有效负载的新响应。

      另外,我们有一个自定义的HttpMessageConverter;事实证明,它永远无法正常用于文件下载,因为 inputStream 在关闭之前没有被完全读取(它在SynchronousMethodHandler.executeAndDecode() 结束时被关闭)。它只是“起作用”,因为将日志级别设置为调试,feign 的Logger 神奇地单独进行重新打包,作为请求/响应日志记录的一部分。通过将输入流重新打包为ByteArrayInputStream 来修复自定义HttpMessageConverter 对我们有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多