springboot中打印http请求的日志

本文介绍如何通过配置Maven依赖及application.properties文件来使用Logbook日志框架记录HTTP及HTTP客户端请求。同时展示了如何在定义httpClient bean时,通过加入拦截器实现HTTP请求日志的打印。

1. 技术选项:logbook

2. 使用方法

a. 导入logbook的maven依赖

<logbook.version>1.3.0</logbook.version>

<dependency>
            <groupId>org.zalando</groupId>
            <artifactId>logbook-core</artifactId>
            <version>${logbook.version}</version>
        </dependency>
        <dependency>
            <groupId>org.zalando</groupId>
            <artifactId>logbook-servlet</artifactId>
            <version>${logbook.version}</version>
        </dependency>
        <dependency>
            <groupId>org.zalando</groupId>
            <artifactId>logbook-httpclient</artifactId>
            <version>${logbook.version}</version>
        </dependency>
        <dependency>
            <groupId>org.zalando</groupId>
            <artifactId>logbook-spring-boot-starter</artifactId>
            <version>${logbook.version}</version>
        </dependency>

    b. 在application.properties中配置显示方式

# 自动打印HTTP/HTTPCLIENT日志
logbook.write.level=info
logbook.format.style=curl # 或http 

    c. 在定义httpClient的bean中,加入拦截

@Autowired
	private LogbookHttpRequestInterceptor logbookHttpRequestInterceptor;

	@Autowired
	private LogbookHttpResponseInterceptor logbookHttpResponseInterceptor;
@Bean
	@ConditionalOnMissingBean(HttpClient.class)
	public HttpClient httpClient() {
		RequestConfig requestConfig = RequestConfig.custom()
				.setConnectTimeout(properties.getConnectTimeOut())
				.setSocketTimeout(properties.getSocketTimeOut())
				.build();//构建requestConfig
		HttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
				.setUserAgent(properties.getAgent())
				.setMaxConnPerRoute(properties.getMaxConnPerRoute())
				.setMaxConnTotal(properties.getMaxConnTotal())
				//使用logbook打印HTTP请求的日志
				.addInterceptorFirst(logbookHttpRequestInterceptor)
				.addInterceptorFirst(logbookHttpResponseInterceptor)
				//使用长连接
				//.setConnectionReuseStrategy(new NoConnectionReuseStrategy())
				.build();
		return client;
	}

此时项目发送http请求,就会以curl/http的方式,显示调用的http url日志。
在Spring Boot应用中,默认情况下HTTP请求日志级别较低,可能会导致调试模式下无法正常输出HTTP请求相关的日志信息。如果你希望查看详细的HTTP请求日志,可以按照以下步骤操作: ### 解决方案 #### 1. 配置Logback或Logging Level 修改`application.properties`或`application.yml`文件,调整日志级别的配置。 ##### **通过properties配置** ```properties # 设置全局日志等级为DEBUG或其他更细致的等级 logging.level.root=INFO # 调整org.springframework.web.client.RestTemplate 或 org.apache.http包 的日志等级到DEBUG logging.level.org.springframework.web=DEBUG ``` ##### **通过yml配置** ```yaml logging: level: root: INFO org.springframework.web: DEBUG ``` > 如果你是基于WebFlux项目,则需要设置 `reactor.netty.http.client.HttpClient` 相关的日志级别为DEBUG。 --- #### 2. 使用第三方库增强日志功能 (如log4j/logback) 如果内置日志不够详细,还可以引入一些专门用于记录HTTP请求内容的依赖项,例如`springfox-swagger-ui`或者利用拦截器自定义日志打印。 **添加Maven依赖(可选):** ```xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> ``` 然后手动创建一个过滤器捕获所有传入传出的数据流并记录下来。 --- #### 3. 检查是否遗漏了必要的注解 某些时候是因为控制器方法缺少合适的映射路径或是参数绑定错误所引起的问题。确认每个API端点都已正确定义,并测试它们能否成功响应预期结果。 --- #### 总结 当发现Spring Boot应用程序未显示HTTP请求相关内容时,请首先检查上述提到的各种可能性——包括但不限于调整适当部分的日志敏感度、借助外部组件强化跟踪能力以及排查业务逻辑是否存在异常状况等措施相结合解决问题即可达到理想效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值