Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
Expand Down Expand Up @@ -50,6 +52,7 @@ final class DHttpClientBuilder implements HttpClient.Builder, HttpClient.Builder

private final List<RequestIntercept> interceptors = new ArrayList<>();
private final List<RequestListener> listeners = new ArrayList<>();
private final Set<String> suppressed = new HashSet<>();

private void configureRetryHandler(BeanScope beanScope) {
beanScope.getOptional(RetryHandler.class)
Expand Down Expand Up @@ -170,7 +173,7 @@ private DHttpClientContext buildClient() {
final var httpClient = client != null ? client : defaultClient();
if (requestLogging) {
// register the built-in request/response logging
this.listeners.add(new RequestLogger());
this.listeners.add(new RequestLogger("\n", suppressed));
}
if (bodyAdapter == null) {
bodyAdapter = defaultBodyAdapter();
Expand Down Expand Up @@ -317,6 +320,12 @@ public HttpClient.Builder priority(int priority) {
return this;
}

@Override
public HttpClient.Builder suppressHeader(String header) {
this.suppressed.add(header);
return this;
}

@Override
public HttpClient.Builder.State state() {
return this;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,13 @@ interface Builder {
*/
Builder configureWith(BeanScope beanScope);

/**
* Suppress logging of the given header name.
*
* <p>Authorization headers are suppressed by default.
*/
Builder suppressHeader(String header);

/**
* Return the state of the builder.
*/
Expand Down
18 changes: 15 additions & 3 deletions http-client/src/main/java/io/avaje/http/client/RequestLogger.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
package io.avaje.http.client;

import io.avaje.applog.AppLog;

import java.lang.System.Logger.Level;
import java.net.http.HttpHeaders;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import io.avaje.applog.AppLog;

/**
* Logs request and response details for debug logging purposes using <code>System.Logger</code>.
* <p>
Expand All @@ -31,6 +33,7 @@ public class RequestLogger implements RequestListener {
private static final System.Logger log = AppLog.getLogger("io.avaje.http.client.RequestLogger");

private final String delimiter;
private final Set<String> suppressedHeaders = new HashSet<>();

/**
* Create using the {@literal \n} new line character.
Expand All @@ -43,7 +46,16 @@ public RequestLogger() {
* Create with a given line delimiter.
*/
public RequestLogger(String delimiter) {
this(delimiter, List.of());
}

/**
* Create with a given line delimiter and set of headers to suppress.
*/
public RequestLogger(String delimiter, Collection<String> suppressedHeaders) {
this.delimiter = delimiter;
this.suppressedHeaders.add(DHttpClientContext.AUTHORIZATION);
this.suppressedHeaders.addAll(suppressedHeaders);
}

@Override
Expand Down Expand Up @@ -91,6 +103,6 @@ private void headers(StringBuilder sb, String label, HttpHeaders headers) {
}

boolean obfuscate(String key) {
return DHttpClientContext.AUTHORIZATION.equals(key);
return suppressedHeaders.contains(key);
}
}