From 34e0007f0721ff2e90116a8b64e1ae4ec2ba27e3 Mon Sep 17 00:00:00 2001 From: Kevin Oliver Date: Thu, 23 Mar 2017 21:24:19 -0700 Subject: [PATCH] LoggingHandler does not override channelReadComplete or channelWritabilityChanged Motivation: `io.netty.handler.logging.LoggingHandler` does not log when these events happen. Modifiations: Add overrides with logging to these methods. Result: Logging now happens for these two events. --- .../netty/handler/logging/LoggingHandler.java | 18 ++++++++++++- .../handler/logging/LoggingHandlerTest.java | 27 ++++++++++++++++--- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/handler/src/main/java/io/netty/handler/logging/LoggingHandler.java b/handler/src/main/java/io/netty/handler/logging/LoggingHandler.java index 149a957c15..ae2577f4b4 100644 --- a/handler/src/main/java/io/netty/handler/logging/LoggingHandler.java +++ b/handler/src/main/java/io/netty/handler/logging/LoggingHandler.java @@ -225,10 +225,18 @@ public class LoggingHandler extends ChannelDuplexHandler { ctx.deregister(promise); } + @Override + public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { + if (logger.isEnabled(internalLevel)) { + logger.log(internalLevel, format(ctx, "READ COMPLETE")); + } + ctx.fireChannelReadComplete(); + } + @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (logger.isEnabled(internalLevel)) { - logger.log(internalLevel, format(ctx, "RECEIVED", msg)); + logger.log(internalLevel, format(ctx, "READ", msg)); } ctx.fireChannelRead(msg); } @@ -241,6 +249,14 @@ public class LoggingHandler extends ChannelDuplexHandler { ctx.write(msg, promise); } + @Override + public void channelWritabilityChanged(ChannelHandlerContext ctx) throws Exception { + if (logger.isEnabled(internalLevel)) { + logger.log(internalLevel, format(ctx, "WRITABILITY CHANGED")); + } + ctx.fireChannelWritabilityChanged(); + } + @Override public void flush(ChannelHandlerContext ctx) throws Exception { if (logger.isEnabled(internalLevel)) { diff --git a/handler/src/test/java/io/netty/handler/logging/LoggingHandlerTest.java b/handler/src/test/java/io/netty/handler/logging/LoggingHandlerTest.java index 8dc42c3ac2..436fbad7df 100644 --- a/handler/src/test/java/io/netty/handler/logging/LoggingHandlerTest.java +++ b/handler/src/test/java/io/netty/handler/logging/LoggingHandlerTest.java @@ -111,6 +111,17 @@ public class LoggingHandlerTest { verify(appender).doAppend(argThat(new RegexLogMatcher(".+ACTIVE$"))); } + @Test + public void shouldLogChannelWritabilityChanged() throws Exception { + EmbeddedChannel channel = new EmbeddedChannel(new LoggingHandler()); + // this is used to switch the channel to become unwritable + channel.config().setWriteBufferLowWaterMark(5); + channel.config().setWriteBufferHighWaterMark(10); + channel.write("hello", channel.newPromise()); + + verify(appender).doAppend(argThat(new RegexLogMatcher(".+WRITABILITY CHANGED$"))); + } + @Test public void shouldLogChannelRegistered() { new EmbeddedChannel(new LoggingHandler()); @@ -194,7 +205,7 @@ public class LoggingHandlerTest { String msg = "hello"; EmbeddedChannel channel = new EmbeddedChannel(new LoggingHandler()); channel.writeInbound(msg); - verify(appender).doAppend(argThat(new RegexLogMatcher(".+RECEIVED: " + msg + '$'))); + verify(appender).doAppend(argThat(new RegexLogMatcher(".+READ: " + msg + '$'))); String handledMsg = channel.readInbound(); assertThat(msg, is(sameInstance(handledMsg))); @@ -206,7 +217,7 @@ public class LoggingHandlerTest { ByteBuf msg = Unpooled.copiedBuffer("hello", CharsetUtil.UTF_8); EmbeddedChannel channel = new EmbeddedChannel(new LoggingHandler()); channel.writeInbound(msg); - verify(appender).doAppend(argThat(new RegexLogMatcher(".+RECEIVED: " + msg.readableBytes() + "B$"))); + verify(appender).doAppend(argThat(new RegexLogMatcher(".+READ: " + msg.readableBytes() + "B$"))); ByteBuf handledMsg = channel.readInbound(); assertThat(msg, is(sameInstance(handledMsg))); @@ -219,7 +230,7 @@ public class LoggingHandlerTest { ByteBuf msg = Unpooled.EMPTY_BUFFER; EmbeddedChannel channel = new EmbeddedChannel(new LoggingHandler()); channel.writeInbound(msg); - verify(appender).doAppend(argThat(new RegexLogMatcher(".+RECEIVED: 0B$"))); + verify(appender).doAppend(argThat(new RegexLogMatcher(".+READ: 0B$"))); ByteBuf handledMsg = channel.readInbound(); assertThat(msg, is(sameInstance(handledMsg))); @@ -237,7 +248,7 @@ public class LoggingHandlerTest { EmbeddedChannel channel = new EmbeddedChannel(new LoggingHandler()); channel.writeInbound(msg); - verify(appender).doAppend(argThat(new RegexLogMatcher(".+RECEIVED: foobar, 5B$"))); + verify(appender).doAppend(argThat(new RegexLogMatcher(".+READ: foobar, 5B$"))); ByteBufHolder handledMsg = channel.readInbound(); assertThat(msg, is(sameInstance(handledMsg))); @@ -245,6 +256,14 @@ public class LoggingHandlerTest { assertThat(channel.readInbound(), is(nullValue())); } + @Test + public void shouldLogChannelReadComplete() throws Exception { + ByteBuf msg = Unpooled.EMPTY_BUFFER; + EmbeddedChannel channel = new EmbeddedChannel(new LoggingHandler()); + channel.writeInbound(msg); + verify(appender).doAppend(argThat(new RegexLogMatcher(".+READ COMPLETE$"))); + } + /** * A custom EasyMock matcher that matches on Logback messages. */