LoggingHandler
日志处理器LoggingHandler是使用Netty进行开发时的好帮手,它可以对入站\出站事件进行日志记录,从而方便我们进行问题排查。首先看类签名:1
2@Sharable
public class LoggingHandler extends ChannelDuplexHandler
注解Sharable说明LoggingHandler没有状态相关变量,所有Channel可以使用一个实例。继承自ChannelDuplexHandler表示对入站出站事件都进行日志记录。最佳实践:使用static修饰LoggingHandler实例,并在生产环境删除LoggingHandler。
该类的成员变量如下:
1 | // 实际使用的日志处理,slf4j、log4j等 |
看完成员变量,在移目构造方法,LoggingHandler的构造方法较多,一个典型的如下:
1 | public LoggingHandler(LogLevel level) { |
在构造方法中获取用户实际使用的日志框架,如slf4j、log4j等,并日志设置记录级别。其他的构造方法也类似,不在赘述。
记录出站、入站事件的过程类似,我们以ChannelRead()为例分析,代码如下:
1 | public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { |
其中的代码都简单明了,主要分析formatByteBuf()方法:
1 | protected String formatByteBuf(String eventName, ByteBuf msg) { |
其中的数字计算,容易让人失去耐心,使用逆向思维,放上结果反推: