From 77ea0ce87a4e868f226b77408670e2e47aebf817 Mon Sep 17 00:00:00 2001 From: limaoning <470165004@qq.com> Date: Wed, 10 Feb 2021 17:09:37 +0800 Subject: [PATCH 1/2] Expose the response headers via `AccessLogArgProvider` --- .../logging/AbstractAccessLogArgProvider.java | 14 ------- .../server/logging/AccessLogArgProvider.java | 9 +++++ .../logging/AccessLogArgProviderH1.java | 21 ++++++++++ .../logging/AccessLogArgProviderH2.java | 20 ++++++++++ .../server/logging/AccessLogHandlerH1.java | 2 +- .../server/logging/AccessLogHandlerH2.java | 4 +- .../logging/AccessLogArgProviderH1Tests.java | 35 +++++++++++++++-- .../logging/AccessLogArgProviderH2Tests.java | 38 ++++++++++++++++--- .../logging/AccessLogArgProviderTests.java | 24 ++++++------ 9 files changed, 128 insertions(+), 39 deletions(-) diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AbstractAccessLogArgProvider.java b/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AbstractAccessLogArgProvider.java index 2f7aa49bdc..a755538a76 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AbstractAccessLogArgProvider.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AbstractAccessLogArgProvider.java @@ -22,7 +22,6 @@ import java.net.SocketAddress; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; -import java.util.Objects; import java.util.function.Supplier; /** @@ -41,7 +40,6 @@ abstract class AbstractAccessLogArgProvider { HttpRequest request; + HttpResponse response; AccessLogArgProviderH1(@Nullable SocketAddress remoteAddress) { super(remoteAddress); @@ -38,6 +40,17 @@ AccessLogArgProviderH1 request(HttpRequest request) { return get(); } + AccessLogArgProviderH1 response(HttpResponse response) { + this.response = Objects.requireNonNull(response, "response"); + return get(); + } + + @Override + @Nullable + public CharSequence status() { + return response == null ? null : response.status().codeAsText(); + } + @Override @Nullable public CharSequence requestHeader(CharSequence name) { @@ -45,6 +58,13 @@ public CharSequence requestHeader(CharSequence name) { return request == null ? null : request.headers().get(name); } + @Override + @Nullable + public CharSequence responseHeader(CharSequence name) { + Objects.requireNonNull(name, "name"); + return response == null ? null : response.headers().get(name); + } + @Override void onRequest() { super.onRequest(); @@ -59,6 +79,7 @@ void onRequest() { void clear() { super.clear(); this.request = null; + this.response = null; } AccessLogArgProviderH1 contentLength(long contentLength) { diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProviderH2.java b/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProviderH2.java index ffaabd1a32..7fe43df90a 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProviderH2.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProviderH2.java @@ -29,6 +29,7 @@ final class AccessLogArgProviderH2 extends AbstractAccessLogArgProvider accessLogArgProvider.status(null)); - accessLogArgProvider.status("200"); - assertThat(accessLogArgProvider.status()).isEqualTo("200"); - } - @Test void contentLength() { assertThat(accessLogArgProvider.contentLength()).isEqualTo(-1); @@ -91,13 +82,11 @@ void clear() { accessLogArgProvider.onRequest(); accessLogArgProvider .chunked(true) - .increaseContentLength(100) - .status("200"); + .increaseContentLength(100); assertThat(accessLogArgProvider.zonedDateTime()).isNotNull(); assertThat(accessLogArgProvider.method()).isEqualTo(HttpMethod.POST.name()); assertThat(accessLogArgProvider.uri()).isEqualTo(URI); assertThat(accessLogArgProvider.protocol()).isEqualTo(HttpVersion.HTTP_1_1.text()); - assertThat(accessLogArgProvider.status()).isEqualTo("200"); assertThat(accessLogArgProvider.chunked).isTrue(); assertThat(accessLogArgProvider.contentLength).isEqualTo(100); assertThat(accessLogArgProvider.startTime).isNotNull(); @@ -110,7 +99,6 @@ private void assertAccessLogArgProviderInitState() { assertThat(accessLogArgProvider.method()).isNull(); assertThat(accessLogArgProvider.uri()).isNull(); assertThat(accessLogArgProvider.protocol()).isNull(); - assertThat(accessLogArgProvider.status()).isNull(); assertThat(accessLogArgProvider.chunked).isFalse(); assertThat(accessLogArgProvider.contentLength).isEqualTo(-1); assertThat(accessLogArgProvider.startTime).isZero(); @@ -122,11 +110,21 @@ static class TestAccessLogArgProvider extends AbstractAccessLogArgProvider Date: Wed, 10 Feb 2021 20:25:04 +0800 Subject: [PATCH 2/2] Fix comments --- .../netty/http/server/logging/AccessLogArgProvider.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProvider.java b/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProvider.java index 9ff292bb1f..74bf7da271 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProvider.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/server/logging/AccessLogArgProvider.java @@ -98,7 +98,8 @@ public interface AccessLogArgProvider { long duration(); /** - * Returns the value of a request header with the specified name. + * Returns the value of a request header with the specified name + * or {@code null} is case such request header does not exist. * * @param name the request header name * @return the value of the request header @@ -107,10 +108,12 @@ public interface AccessLogArgProvider { CharSequence requestHeader(CharSequence name); /** - * Returns the value of a response header with the specified name. + * Returns the value of a response header with the specified name + * or {@code null} is case such response header does not exist. * * @param name the response header name * @return the value of the response header + * @since 1.0.4 */ @Nullable CharSequence responseHeader(CharSequence name);