You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

问题排查与解决

  1. SLF4J版本兼容性问题
    RestAssured 5.3.0自带的SLF4J版本可能低于你手动指定的2.0.9,版本不匹配会导致日志桥接失效。建议移除手动指定的SLF4J依赖,直接使用RestAssured自带的版本,避免冲突。

  2. 日志绑定依赖范围问题
    log4j-slf4j2-impl的scope设为test,但RestAssured核心依赖运行在main scope下,可能导致日志绑定无法被加载。将其scope改为compile,或者直接移除scope限制。

  3. 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:记录请求和响应的头部信息
  1. RestAssured过滤器替代方案
    如果依赖日志配置过于繁琐,可以直接使用RestAssured自带的日志过滤器,无需依赖HttpClient日志配置:
RestAssured.given()
        .filter(new RequestLoggingFilter())
        .filter(new ResponseLoggingFilter())
        .get("https://google.com");
  1. 配置文件位置检查
    确保log4j2.xml放在src/test/resources目录下(测试代码运行在test scope),否则配置文件无法被正确加载。

内容的提问来源于stack exchange,提问作者Georgi Georgiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:07:41