概要
一般而言, 基于Netty的应用都会在核心业务步骤加上日志, 用来观察应用运行状况或排查线上问题.
日志可以加, 但不能毫无目的的加, 也不能什么关键信息都不打印, 如果有用户, 则要打印用户id, 订单则打印订单id. 为了简化日志的使用Nettyx对出入站日志进行了简单的封装
先导入Nettyx依赖
请从maven中央仓获取{lastest.version},最新版本号
<dependency>
<groupId>io.github.fbbzl</groupId>
<artifactId>nettyx</artifactId>
<version>{lastest.version}</version>
</dependency>
现阶段, Nettyx的出入站日志只支持Sl4J及其实现, 不支持commonlogging
LoggerHandler
Nettyx提供了LoggerHandler, 此类包含InboundLogger和OutboundLogger, 也就是入站日志和出站日志, 通过传递log对象来实例化LoggerHandler, 输出的内容根LoggerHandler在pipeline中的位置相关.
如果想看到最终出站的日志, 可以把OutboundLogger放在pipeline的首位.
如果想看我们最终接收的日志, 可以把InboundLogger放在pipeline的末尾.
以此类推.
话不多说, 来吧展示
private ChannelInitializer<NioSocketChannel> channelInitializer(SocketAddress address) {
return new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel channel) {
channel.pipeline().addLast(
, new StartEndFlagFrameCodec(false, wrappedBuffer(new byte[]{(byte) 0x7e}))
, new EscapeCodec(EscapeMap.mapHex("7e", "7d5e"))
// 如果只是想记录序列化后的对象, 可以直接在序列化编解码中直接添加日志
, new UserCodec()
// 入站日志handler, 第一个构造函数需要传入log对象,最佳实践是使用lombok的@Sl4j系列注解
// 第二个构造参数要求你指定出入站日志的级别, 默认是INFO, 这里指定为ERROR
, new LoggerHandler.InboundLogger(log, LoggerHandler.Sl4jLevel.ERROR)
, inAdvice);
}
};
}
==========================================================================
至此我们完成了简单的出入站日志