如何为RestAssured 5.3.0配置Apache HttpClient 4.5日志?
RestAssured 5.3.0 无法记录底层HTTP请求/响应日志排查
我使用RestAssured 5.3.0,想要记录底层的HTTP请求和响应内容。RequestLoggingFilter文档提到,如果需要记录实际传输的内容,可以参考HTTP Client的日志文档或使用Wireshark等工具,但文档指向的是HttpClient v5的日志指南。通过mvn dependency:tree查询后发现,RestAssured 5.3.0实际依赖的是HttpClient v4.5,于是我参考了v4.5的日志指南配置log4j2.xml,但运行测试后控制台完全看不到org.apache.*相关的日志。以下是我的配置、依赖、测试代码和输出,请问问题出在哪里?
log4j2.xml配置
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN" strict="true"> <Appenders> <Appender type="Console" name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{3} - %msg%n"/> </Appender> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="Console"/> </Root> <Logger name="org.apache.http" level="all"> <AppenderRef ref="Console"/> </Logger> <!-- 尝试在更高层级启用日志的操作 --> <Logger name="org.apache" level="all"> <AppenderRef ref="Console"/> </Logger> </Loggers> </Configuration>
pom.xml日志依赖
... <!-- SLF4J API --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.9</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.21.1</version> </dependency> <!-- Log4j2 SLF4J绑定 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j2-impl</artifactId> <version>2.21.1</version> <scope>test</scope> </dependency> ...
测试代码
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.testng.annotations.Test; public class TestClass { Logger logger = LogManager.getLogger(this); @Test public void test() { logger.info("Before request"); RestAssured.given() .get("https://google.com"); logger.info("After request"); } }
测试输出
22:33:51.329 [main] INFO TestClass - Before request 22:33:52.769 [main] INFO TestClass - After request =============================================== Default Suite Total tests run: 1, Passes: 1, Failures: 0, Skips: 0 =============================================== Process finished with exit code 0
问题排查与解决
SLF4J版本兼容性问题
RestAssured 5.3.0自带的SLF4J版本可能低于你手动指定的2.0.9,版本不匹配会导致日志桥接失效。建议移除手动指定的SLF4J依赖,直接使用RestAssured自带的版本,避免冲突。日志绑定依赖范围问题
log4j-slf4j2-impl的scope设为test,但RestAssured核心依赖运行在main scope下,可能导致日志绑定无法被加载。将其scope改为compile,或者直接移除scope限制。HttpClient日志配置不全
HttpClient v4.5需要开启特定日志类别才能输出请求/响应细节,补充以下Logger配置到log4j2.xml中:
<Logger name="org.apache.http.wire" level="debug"> <AppenderRef ref="Console"/> </Logger> <Logger name="org.apache.http.headers" level="debug"> <AppenderRef ref="Console"/> </Logger>
org.apache.http.wire:记录实际传输的字节内容org.apache.http.headers:记录请求和响应的头部信息
- RestAssured过滤器替代方案
如果依赖日志配置过于繁琐,可以直接使用RestAssured自带的日志过滤器,无需依赖HttpClient日志配置:
RestAssured.given() .filter(new RequestLoggingFilter()) .filter(new ResponseLoggingFilter()) .get("https://google.com");
- 配置文件位置检查
确保log4j2.xml放在src/test/resources目录下(测试代码运行在test scope),否则配置文件无法被正确加载。
内容的提问来源于stack exchange,提问作者Georgi Georgiev
相关产品推荐
相关产品推荐

