# feign打印调用日志

开发测试环境排查问题方便,开启feign打印调用日志

# openfeign依赖的引入

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.1.1.RELEASE</version>
</dependency>
1
2
3
4
5

# feignClient的编写

package com.reservation.qywechat.feign.member;

import com.agile.common.jars.struct.dto.ApiMessage;
import com.reservation.qywechat.feign.member.dto.GetUsernIfoDTO;
import com.reservation.qywechat.feign.member.dto.SendSubscribeMessageResponse;
import com.reservation.qywechat.feign.member.vo.GetUserInfoVO;
import com.reservation.qywechat.model.vo.SendReservationTemplateVO;
import feign.Headers;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 * @version V1.0
 * @Description:
 * @author: warren
 * @date: 2023/8/23 16:49
 */
@FeignClient(name = "mpmember")
public interface MiniWechatUserClient {

    @RequestMapping("/mpmember/api/wx/sendWxSubscribeMessage")
    ApiMessage<List<SendSubscribeMessageResponse>> sendWxSubscribeMessage(@RequestBody SendReservationTemplateVO sendReservationTemplateVO,
                                                                          @RequestHeader("appId") String appId,
                                                                          @RequestHeader("tenantId") String tenantId,
                                                                           @RequestHeader("Accept") String contentType);
    @RequestMapping("/mpmember/api/wx/getUserInfo")
    ApiMessage<GetUsernIfoDTO> getUserInfo(@RequestBody GetUserInfoVO getUserInfoVO,
                                           @RequestHeader("appId") String appId,
                                           @RequestHeader("tenantId") String tenantId,
                                           @RequestHeader("Accept") String contentType
    );
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

# feign调用

            GetUserInfoVO getUserInfoVO = new GetUserInfoVO();
            getUserInfoVO.setAppId(appId);
            getUserInfoVO.setMiniAppUserId(userId);
            ApiMessage<GetUsernIfoDTO> userInfo = miniWechatUserClient.getUserInfo(getUserInfoVO, appId, tenantId, contentType);
            if (Objects.isNull(userInfo) || Objects.isNull(userInfo.getData())) {
                Asserts.check(true, "用户不存在");
            }
1
2
3
4
5
6
7

# 开启feign的调用日志

日志级别 NONE:没有日志记录 BASIC:记录请求方法、URL以及响应状态代码和执行时间 HEADERS:记录基本信息以及请求和响应头信息 FULL:记录基本信息以及请求和响应头信息、请求和响应体信息

feign: #feign日志打印
  client:
    config:
      mpmember:
        loggerLevel: full
logging:
  level:
    com.reservation.qywechat.feign.member.MiniWechatUserClient: debug
1
2
3
4
5
6
7
8

1721640413314.png

# 第二种方式以java代码

Configuration文件方式,feignClient里面引入上述FeignConfiguration.class配置类

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
public class FeignConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {
        //这里记录所有,根据实际情况选择合适的日志level,此处取值共有四个NONE、BASIC、HEADERS和FULL
        return Logger.Level.BASIC;
    }
}
1
2
3
4
5
6
7
8
9
10
11
@Component
@FeignClient(name = "user", url = "http://127.0.0.1:8080",configuration = FeignConfiguration.class)
public interface UserClient {
 
    @PostMapping(value = "/test/getUserInfo",consumes = MediaType.APPLICATION_JSON_VALUE)
    String getUserInfo(Model model);
}
1
2
3
4
5
6
7

最后yml配置具体日志级别

logging:
  level:
    # 指定某一个文件的日志级别
    com.bc.feign.UserFeignClient: DEBUG
    # 为所写服务应用的最顶层的包目录设置日志级别

1
2
3
4
5
6

# 相关资料

全量分析

评 论:

上次更新时间: 7/22/2024, 5:32:45 PM