在 Java 里“HTTP 记录日志”通常分三种场景,不同场景做法不一样:
java.net.http.HttpClient(JDK 11+)通过 拦截器 / Filter 记录
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_2)
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString());
// 手动记录
log.info("URL: {}", request.uri());
log.info("Status: {}", response.statusCode());
log.info("Body: {}", response.body());
✅ 简单但需手动写
使用 HttpLoggingInterceptor
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(
msg -> log.info(msg)
);
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
CloseableHttpClient client = HttpClients.custom()
.addInterceptorLast(interceptor)
.build();
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(
message -> log.info(message)
);
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.build();
✅ 可记录 URL / Header / Body
@Component
public class LoggingFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws IOException, ServletException {
log.info("URI: {}", request.getRequestURI());
log.info("Method: {}", request.getMethod());
chain.doFilter(request, response);
}
}
management:
endpoints:
web:
exposure:
include: httptrace
CommonsRequestLoggingFilter@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
CommonsRequestLoggingFilter filter =
new CommonsRequestLoggingFilter();
filter.setIncludePayload(true);
filter.setIncludeHeaders(true);
return filter;
}
server:
tomcat:
accesslog:
enabled: true
pattern: "%t %a %r %s %b"
✅ 不要记录敏感信息(密码、token)
✅ Body 日志只在调试环境开启
✅ 使用异步日志(Logback / Log4j2)
✅ 日志分级(INFO / DEBUG)
如果你能告诉我:
我可以给你 更精确的示例代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。