温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java HTTP如何记录日志

发布时间:2026-10-01 13:58:20 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 里“HTTP 记录日志”通常分三种场景,不同场景做法不一样:


一、记录自身 HTTP 请求/响应(客户端)

1️⃣ 使用 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());

✅ 简单但需手动写


2️⃣ Apache HttpClient(推荐企业项目)

使用 HttpLoggingInterceptor

HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(
        msg -> log.info(msg)
);
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

CloseableHttpClient client = HttpClients.custom()
        .addInterceptorLast(interceptor)
        .build();

3️⃣ OkHttp(非常常用)

HttpLoggingInterceptor logging = new HttpLoggingInterceptor(
        message -> log.info(message)
);
logging.setLevel(HttpLoggingInterceptor.Level.BODY);

OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(logging)
        .build();

✅ 可记录 URL / Header / Body


二、记录 Spring 接口请求(服务端)

1️⃣ Spring Boot + 过滤器(推荐)

@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);
    }
}

2️⃣ Spring Boot Actuator(HTTP 访问日志)

management:
  endpoints:
    web:
      exposure:
        include: httptrace

3️⃣ 使用 CommonsRequestLoggingFilter

@Bean
public CommonsRequestLoggingFilter requestLoggingFilter() {
    CommonsRequestLoggingFilter filter =
            new CommonsRequestLoggingFilter();
    filter.setIncludePayload(true);
    filter.setIncludeHeaders(true);
    return filter;
}

三、记录 HTTP 服务器访问日志

Tomcat(Spring Boot)

server:
  tomcat:
    accesslog:
      enabled: true
      pattern: "%t %a %r %s %b"

四、生产环境建议

✅ 不要记录敏感信息(密码、token)
✅ Body 日志只在调试环境开启
✅ 使用异步日志(Logback / Log4j2)
✅ 日志分级(INFO / DEBUG)


如果你能告诉我:

  • 是 客户端还是服务端
  • 用的什么框架(Spring / OkHttp / HttpClient)

我可以给你 更精确的示例代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手