Skip to content

Commit 976e3d4

Browse files
committed
#31 - By default register RequestLogger - add HttpClientContext.requestLogging(boolean) to enable disable
1 parent 41bd56b commit 976e3d4

File tree

12 files changed

+59
-22
lines changed

12 files changed

+59
-22
lines changed

client/src/main/java/io/avaje/http/client/DHttpClientContextBuilder.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ class DHttpClientContextBuilder implements HttpClientContext.Builder {
1818

1919
private HttpClient client;
2020
private String baseUrl;
21+
private boolean requestLogging = true;
2122
private Duration requestTimeout = Duration.ofSeconds(20);
2223
private BodyAdapter bodyAdapter;
2324
private RetryHandler retryHandler;
@@ -69,6 +70,12 @@ public HttpClientContext.Builder retryHandler(RetryHandler retryHandler) {
6970
return this;
7071
}
7172

73+
@Override
74+
public HttpClientContext.Builder requestLogging(boolean requestLogging) {
75+
this.requestLogging = requestLogging;
76+
return this;
77+
}
78+
7279
@Override
7380
public HttpClientContext.Builder requestListener(RequestListener requestListener) {
7481
this.listeners.add(requestListener);
@@ -148,6 +155,10 @@ public HttpClientContext build() {
148155
if (client == null) {
149156
client = defaultClient();
150157
}
158+
if (requestLogging) {
159+
// register the built in request/response logging
160+
requestListener(new RequestLogger());
161+
}
151162
return new DHttpClientContext(client, baseUrl, requestTimeout, bodyAdapter, retryHandler, buildListener(), authTokenProvider, buildIntercept());
152163
}
153164

@@ -173,8 +184,8 @@ private RequestIntercept buildIntercept() {
173184

174185
private HttpClient defaultClient() {
175186
final HttpClient.Builder builder = HttpClient.newBuilder()
176-
.followRedirects(redirect)
177-
.connectTimeout(Duration.ofSeconds(20));
187+
.followRedirects(redirect)
188+
.connectTimeout(Duration.ofSeconds(20));
178189
if (cookieHandler != null) {
179190
builder.cookieHandler(cookieHandler);
180191
}

client/src/main/java/io/avaje/http/client/HttpClientContext.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,13 +171,42 @@ interface Builder {
171171
*/
172172
Builder retryHandler(RetryHandler retryHandler);
173173

174+
/**
175+
* Disable or enable built in request and response logging.
176+
* <p>
177+
* By default request logging is enabled. Set this to false to stop
178+
* the default {@link RequestLogger} being registered to log
179+
* request and response headers and bodies etc.
180+
* <p>
181+
* With logging level set to {@code DEBUG} for
182+
* {@code io.avaje.http.client.RequestLogger} the request and
183+
* response are logged with headers only.
184+
* <p>
185+
* Set the logging level to {@code TRACE} to include the request
186+
* and response body payloads (with truncation for large bodies).
187+
*
188+
* <h3>Suppression</h3>
189+
* <p>
190+
* We can also use {@link HttpClientRequest#suppressLogging()} to suppress
191+
* logging on specific requests.
192+
* <p>
193+
* Logging of Authorization headers is suppressed.
194+
* {@link AuthTokenProvider} requests are suppressed.
195+
*
196+
* @param requestLogging To turn disable/enable the registration of the default logger
197+
* @see RequestLogger
198+
*/
199+
Builder requestLogging(boolean requestLogging);
200+
174201
/**
175202
* Add a request listener. Multiple listeners may be added, when
176203
* do so they will process events in the order they were added.
177204
* <p>
178-
* Note that {@link RequestLogger} is an
179-
* implementation for debug logging request/response headers and
180-
* content.
205+
* Note that {@link RequestLogger} is an implementation for debug
206+
* logging request/response headers and content which is registered
207+
* by default depending on {@link #requestLogging(boolean)}.
208+
*
209+
* @see RequestLogger
181210
*/
182211
Builder requestListener(RequestListener requestListener);
183212

client/src/test/java/io/avaje/http/client/AuthTokenTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ void sendEmail() {
4848
HttpClientContext ctx = HttpClientContext.newBuilder()
4949
.baseUrl("https://foo")
5050
.bodyAdapter(new JacksonBodyAdapter(objectMapper))
51-
.requestListener(new RequestLogger())
5251
.authTokenProvider(new MyAuthTokenProvider())
5352
.build();
5453

client/src/test/java/io/avaje/http/client/BaseWebTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ public static void shutdown() {
2626
public static HttpClientContext client() {
2727
return HttpClientContext.newBuilder()
2828
.baseUrl(baseUrl)
29-
.requestListener(new RequestLogger())
3029
.bodyAdapter(new JacksonBodyAdapter(new ObjectMapper()))
31-
// .withBodyAdapter(new GsonBodyAdapter(new Gson()))
3230
.build();
3331
}
3432
}

client/src/test/java/io/avaje/http/client/DHttpApiTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package io.avaje.http.client;
22

3-
import com.fasterxml.jackson.databind.DeserializationFeature;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
53
import org.example.github.Repo;
64
import org.example.github.Simple;
7-
import org.example.github.SimpleHttpClient;
5+
import org.example.github.httpclient.Simple$HttpClient;
86
import org.junit.jupiter.api.Test;
97

108
import java.util.List;
@@ -22,7 +20,7 @@ void test_github_listRepos() {
2220
.build();
2321

2422
DHttpApi httpApi = new DHttpApi();
25-
httpApi.addProvider(new SimpleHttpClient.Provider());
23+
httpApi.addProvider(new Simple$HttpClient.Provider());
2624
final Simple simple = httpApi.provideFor(Simple.class, clientContext);
2725

2826
final List<Repo> repos = simple.listRepos("rbygrave", "junk");

client/src/test/java/io/avaje/http/client/HelloBasicAuthTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class HelloBasicAuthTest extends BaseWebTest {
1414
public static HttpClientContext client() {
1515
return HttpClientContext.newBuilder()
1616
.baseUrl(baseUrl)
17-
.requestListener(new RequestLogger())
1817
.bodyAdapter(new JacksonBodyAdapter(new ObjectMapper()))
1918
.requestIntercept(new BasicAuthIntercept("rob", "bot"))
2019
.build();

client/src/test/java/io/avaje/http/client/RequestListenerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public void response(Event event) {
3636
private HttpClientContext createClient(TDRequestListener tdRequestListener) {
3737
return HttpClientContext.newBuilder()
3838
.baseUrl(baseUrl)
39+
.requestLogging(false)
3940
.requestListener(new RequestLogger())
4041
.bodyAdapter(new JacksonBodyAdapter())
4142
.requestListener(tdRequestListener)

client/src/test/java/io/avaje/http/client/RetryTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ HttpClientContext initClientWithRetry() {
1616
return HttpClientContext.newBuilder()
1717
.baseUrl("http://localhost:8887")
1818
.bodyAdapter(new JacksonBodyAdapter())
19-
.requestListener(new RequestLogger())
2019
.retryHandler(new SimpleRetryHandler(4, 1))
2120
.requestIntercept(myIntercept)
2221
.build();

client/src/test/java/org/example/github/GithubTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ void test() throws InterruptedException {
1919
final HttpClientContext clientContext = HttpClientContext.newBuilder()
2020
.baseUrl("https://api.github.com")
2121
.bodyAdapter(new JacksonBodyAdapter())
22-
.requestListener(new RequestLogger())
22+
.requestLogging(false)
2323
.build();
2424

2525
clientContext.request()

client/src/test/java/org/example/github/SimpleProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.avaje.http.client.HttpApiProvider;
44
import io.avaje.http.client.HttpClientContext;
5+
import org.example.github.httpclient.Simple$HttpClient;
56

67
public class SimpleProvider implements HttpApiProvider<Simple> {
78

@@ -12,6 +13,6 @@ public Class<Simple> type() {
1213

1314
@Override
1415
public Simple provide(HttpClientContext client) {
15-
return new SimpleHttpClient(client);
16+
return new Simple$HttpClient(client);
1617
}
1718
}

0 commit comments

Comments
 (0)