我找不到如何在 application.yml 中配置日志级别以启用记录 Spring boot 3.2 中新的 RestClient 发送的请求和响应。
我知道我可以使用拦截器来完成此操作,但我更喜欢使用 Spring 中的默认日志记录机制。
使用 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]"
...