Spring Cloud Feign(第二篇)之日志输出

本文围绕Spring Cloud Feign的日志输出展开,介绍了其日志输出的相关配置。包括Feign的Level日志级别配置(默认是NONE)和log日志级别配置(默认是debug),还展示了全局开启Logger.Level.FULL + log debug级别的方式,最后总结了自带日志输出配置方式,后续将介绍实现原理及自定义输出。

timg (1).jpeg

Spring Cloud Feign 之日志输出

环境信息: java 1.8、Spring boot 1.5.10.RELEASE、spring cloud-Edgware.SR3、maven 3.3+

在平时开发过程中少不了查看日志解决问题,一个好的框架日志输出是必不可少的,Feign也一样

Feign日志输出说明

Feign的日志是以下部分组成

1、Feign的Level日志级别配置默认是:NONE,不要跟log日志级别混淆

日志级别枚举类 Logger.Level

NONE 不输出日志

BASIC 只有请求方法、URL、响应状态代码、执行时间

HEADERS基本信息以及请求和响应头

FULL 请求和响应 的heads、body、metadata,建议使用这个级别

2、log日志级别配置,默认是debug

使用指定Feign类会包名配置日志打印级别

此处使用spring logging配置 比如打印 UserFeign logging.level.com.example.feign.UserFeign=debug

Feign日志输出-Logger.Level.FULL+log debug级别

全局开启方式 使用spring java config 配置,注意该类一定要放到spring可以扫描到的包下

/**
 * feign 配置
 * @author: sunshaoping
 * @date: Create by in 下午4:07 2018/8/7
 */
@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLevel() {
        return Logger.Level.FULL;
    }
}

application.properties 配置debug 日志输出级别

user.url=http://localhost:8080/user
logging.level.com.example.feign.UserFeign=debug

运行 UserFeignTest.save方法 可以看到以下保存user输出的请求和响应日志。

2018-08-07 16:48:03.011 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] ---> POST http://localhost:8080/user HTTP/1.1
2018-08-07 16:48:03.011 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] Content-Type: application/json;charset=UTF-8
2018-08-07 16:48:03.011 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] Content-Length: 27
2018-08-07 16:48:03.011 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] 
2018-08-07 16:48:03.011 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] {"id":null,"name":"张三"}
2018-08-07 16:48:03.012 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] ---> END HTTP (27-byte body)
2018-08-07 16:48:03.041 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] <--- HTTP/1.1 200 (29ms)
2018-08-07 16:48:03.042 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] content-length: 0
2018-08-07 16:48:03.043 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] date: Tue, 07 Aug 2018 08:48:03 GMT
2018-08-07 16:48:03.043 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] 
2018-08-07 16:48:03.043 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#save] <--- END HTTP (0-byte body)

运行 UserFeignTest.getUserByID方法 可以看到以下查询user详情输出的请求和响应日志。

2018-08-07 16:48:03.045 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] ---> GET http://localhost:8080/user/5 HTTP/1.1
2018-08-07 16:48:03.046 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] ---> END HTTP (0-byte body)
2018-08-07 16:48:03.051 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] <--- HTTP/1.1 200 (4ms)
2018-08-07 16:48:03.051 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] content-type: application/json;charset=UTF-8
2018-08-07 16:48:03.051 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] date: Tue, 07 Aug 2018 08:48:03 GMT
2018-08-07 16:48:03.051 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] transfer-encoding: chunked
2018-08-07 16:48:03.051 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] 
2018-08-07 16:48:03.054 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] {"id":"5","name":"张三"}
2018-08-07 16:48:03.055 DEBUG 75661 --- [           main] com.example.feign.UserFeign              : [UserFeign#getUserByID] <--- END HTTP (26-byte body)

总结

此章节只介绍了feign自带的日志输出配置方式,下面章节将详细介绍其实现原理及自定义log 日志级别输出。

样例地址 spring-cloud-feign 分支 Spring-Cloud-Feign之日志输出

写在最后

Spring Cloud Feign 系列持续更新中。。。。。欢迎关注

如发现哪些知识点有误或是没有看懂,欢迎在评论区提出,博主及时改正。

欢迎转载请注明出处。

### Spring Cloud Feign日志配置不生效的原因分析 Feign 是一种声明式的 Web Service 客户端,它使得编写 HTTP 客户端变得更加简单。在实际开发过程中,如果发现 Feign日志级别设置未按预期工作,则可能是由于以下几个原因造成的。 #### 配置文件中的错误 通常情况下,在 `application.yml` 或者 `application.properties` 文件中定义的日志级别可能存在问题。例如,如果没有正确指定 Logger 的名称或者路径,可能会导致日志无法正常打印[^1]。 ```yaml logging: level: com.example.feignclient: DEBUG ``` 上述 YAML 片段展示了如何针对特定包下的 Feign Client 设置调试级别的日志记录。这里需要注意的是,Logger 名字应当精确匹配到具体的 Feign 接口类所在的全限定名。 #### 缺少依赖项 另一个常见问题是项目缺少必要的依赖库来支持高级别的日志功能。确保引入了正确的 SLF4J 和 Logback 实现版本是非常重要的。以下是 Maven 构建工具所需的典型依赖关系: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-slf4j</artifactId> </dependency> ``` 通过加入这些额外的支持模块可以增强应用程序对于不同种类事件消息捕获的能力[^2]。 #### 错误的应用场景 最后一点要考虑的就是业务逻辑本身是否存在干扰因素影响到了最终效果呈现出来的情况发生。比如某些框架内部机制会覆盖掉外部自定义参数设定等等现象都需要仔细排查确认清楚后再做调整优化处理措施才行哦! ```java @FeignClient(name="example-service", url="${service.url}") public interface ExampleService { @GetMapping("/api/example") String getExample(); } ``` 以上代码片段展示了一个标准形式下创建远程调用服务接口实例的方法过程演示图解说明文档资料链接地址如下所示: ### 总结解决方案 综上所述,要解决 Spring Cloud Feign 日志配置失效的问题可以从三个方面入手:一是核查配置文件里的 logger 路径是否准确无误;二是检查是否有遗漏任何关键性的第三方插件安装情况存在与否;三是审视整个程序运行期间有没有其他潜在冲突源码部分相互作用产生不良后果表现特征等方面进行全面细致入微地探索研究之后再采取相应有效的纠正改进办法即可达成目标完成任务啦😊
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值