Spring Cloud OpenFeign自定义日志

本文探讨了Spring Cloud OpenFeign的日志功能,重点解析了feign.Logger的源码,揭示了不同日志级别的实现细节,帮助开发者更好地理解和定制Feign的日志输出。
摘要由CSDN通过智能技术生成
期望:
	输出自己想要的日志格式,包含请求参数,响应参数,响应时间,请求URL
处理方法:
	1、打开日志
	2、继承:  feign.Logger 
	      实现:logAndRebufferResponse
/**
*打开日志
*/
@Configuration
public class FeignLogConfiguration {
   
  @Bean
  Logger.Level feignLoggerLevel() {
   
    return Logger.Level.BASIC;
  }
}
/**
*继承:  feign.Logger 
*实现:logAndRebufferResponse
**/
@Component
public class RemoteLogger extends Logger {
   
 private static final PosLogger logger = new PosLogger(RemoteLogger.class);
    @Override
    protected void log(String s, String s1, Object... objects) {
   
    }

    @Override
    protected void logRequest(String configKey, Logger.Level logLevel, Request request) {
   
    }

    @Override
    protected Response logAndRebufferResponse(String configKey, Logger.Level logLevel, Response response, long elapsedTime) throws IOException {
   
            if (response.body() != null) {
   
                String result="";
                byte[] bodyData = Util.toByteArray(response.body().asInputStream());
                int bodyLength = bodyData.length;
                if (bodyLength > 0) {
   
                    result = Util.decodeOrDefault(bodyData, Util.UTF_8, "Binary data");
                }
                Response build = response.toBuilder().body(bodyData).build();
                Request request = build.request();
                String bodyText =  request.charset() != null ? new String(request.body(), request.charset()) : null;
               // 请求URL request.url()
               // 请求参数 bodyText
               // 请求结果 result
               // 请求耗时 elapsedTime
               //logger.info(); 
                return build;
            }
        return response;
    }

    protected IOException logIOException(String configKey,
                                         Level logLevel,
                                         IOException ioe,
                                         long elapsedTime) {
   
                                      
         //IOException 自带log输出即可 logger.error();
         // com.netflix.client.ClientException: Load balancer does not have available server for client: lzh-cloud-test 服务没发现未进IO异常 
        return ioe;
    }
 }

日志级别:

NONE,无记录(DEFAULT)。
BASIC,只记录请求方法和URL以及响应状态代码和执行时间。
HEADERS,记录基本信息以及请求和响应标头。
FULL,记录请求和响应的头文件,正文和元数据。

特定类指定特定日志级别:
   logging:
	  level:
	    com.lzh.cloud.feign.UserFeignClient: DEBUG

feign.Logger 源码简单解读

Logger 
	//构造方法
	Logger();
	//请求configKey长度处理
	methodTag(String configKey);
	//输出log日志
	log(String var1, String var2, Object... var3);
	//输出请求相关信息
	logRequest(String configKey, Logger.Level logLevel, Request request)
	//输出重试信息
	logRetry(String configKey, Logger.Level logLevel)
	//输出响应信息
	logAndRebufferResponse(String configKey, Logger.Level logLevel, Response response, long elapsedTime)
	//输出IO异常信息
	logIOException(String configKey, Logger.Level logLevel, IOException ioe, long elapsedTime)	
	//默认的几个类实现
	NoOpLogger
	JavaLogger
	ErrorLogger
	//日志不同级别
	Level

源码:

public abstract class Logger {
   
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值