Spring boot 3.2中新的RestClient,如何记录传出的请求和响应?

问题描述 投票:0回答:1

我找不到如何在 application.yml 中配置日志级别以启用记录 Spring boot 3.2 中新的 RestClient 发送的请求和响应。

我知道我可以使用拦截器来完成此操作,但我更喜欢使用 Spring 中的默认日志记录机制。

spring-boot
1个回答
0
投票

使用 Spring Framework 的新 RestClient,您可以使用多个

RequestFactories
。正如您在评论中指出的,您正在使用
HttpComponentsClientHttpRequestFactory
来表示 Apache HttpComponents

样本服务

@Service
public class RestSampleService {
    private static final String BASE_URL = "https://api.github.com/users/";
    public GitHubUser getGithubUser(final String username) {
        final var restClient = RestClient.builder()
            .requestFactory(new HttpComponentsClientHttpRequestFactory())
            .baseUrl(BASE_URL + username)
            .build();

        return restClient.get().retrieve().body(GitHubUser.class);
    }
}

getGithubUser()
方法从其公共API检索GitHub用户的信息。

这是一个用于(反)序列化的 POJO 示例:


public class GitHubUser {

    public GitHubUser() {
        // For Jackson
    }

    String login;
    String id;
    String url;
    String name;
    // Add'l fields, getters and setters are omitted for brevity
}

用于验证日志记录的 CommandLineRunner:

static final Logger logger =  LoggerFactory.getLogger(SpringSandboxApplication.class);

@Bean
public CommandLineRunner commandLineRunner(RestSampleService restSampleService) {
    return (args) -> {
        final var username = "tcsizmadia";
        final var githubUser = restSampleService.getGithubUser(username);
        logger.info("GitHub user '" + username + "' Full name: '" + githubUser.getName() + "'");
    };
}

有关如何配置日志记录的详细信息,请参阅 Apache HttpClient 官方文档的日志记录部分

在这里,在我的

application.properties
文件中,我配置了 Spring PoC 应用程序来记录请求和响应:

logging.level.org.apache.hc.client5.http=DEBUG

示例日志条目:

2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.headers       : http-outgoing-0 >> GET /users/tcsizmadia HTTP/1.1
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.headers       : http-outgoing-0 >> Accept-Encoding: gzip, x-gzip, deflate
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.headers       : http-outgoing-0 >> Host: api.github.com
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.headers       : http-outgoing-0 >> Connection: keep-alive
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.headers       : http-outgoing-0 >> User-Agent: Apache-HttpClient/5.2.3 (Java/18.0.1)
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.wire          : http-outgoing-0 >> "GET /users/tcsizmadia HTTP/1.1[\r][\n]"
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.wire          : http-outgoing-0 >> "Accept-Encoding: gzip, x-gzip, deflate[\r][\n]"
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.wire          : http-outgoing-0 >> "Host: api.github.com[\r][\n]"
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.wire          : http-outgoing-0 >> "Connection: keep-alive[\r][\n]"
2024-01-09T16:24:09.400+01:00 DEBUG 62611 --- [           main] org.apache.hc.client5.http.wire          : http-outgoing-0 >> "User-Agent: Apache-HttpClient/5.2.3 (Java/18.0.1)[\r][\n]"
...
© www.soinside.com 2019 - 2024. All rights reserved.