Netty 警告 The pipeline contains no upstream handlers; discarding:

最近遇到一个关于netty的问题,先来看问题

使用netty发送消息,功能正常,但是每次发送会有类似如下警告信息

警告: The pipeline contains no upstream handlers; discarding: [id: 0x00807c88] OPEN

2015-9-6 15:39:12 org.jboss.netty.channel.DefaultChannelPipeline

警告: The pipeline contains no upstream handlers; discarding: [id: 0x00807c88, /10.100.17.38:64293 => /10.101.22.108:40018] BOUND: /10.100.17.38:64293

2015-9-6 15:39:12 org.jboss.netty.channel.DefaultChannelPipeline

警告: The pipeline contains no upstream handlers; discarding: [id: 0x00807c88, /10.100.17.38:64293 => /10.101.22.108:40018] CONNECTED: /10.101.22.108:40018

2015-9-6 15:39:12 org.jboss.netty.channel.DefaultChannelPipeline

警告: The pipeline contains no upstream handlers; discarding: [id: 0x00807c88, /10.100.17.38:64293 => /10.101.22.108:40018] WRITTEN_AMOUNT: 365

2015-9-6 15:40:41 org.jboss.netty.channel.DefaultChannelPipeline

警告: The pipeline contains no upstream handlers; discarding: [id: 0x00807c88, /10.100.17.38:64293 => /10.101.22.108:40018] WRITTEN_AMOUNT: 364

虽然不影响功能,但是会造成大量的日志,按照公司的业务量,一天差不多3个G,运维要打人了。。

从错误信息看,是说发送之前,缺少upstreamHandler,因为是直接发送,所以没有添加handler,但是这个警告有点儿太恶心人了。。

为了不让他警告,只能做如下处理,在bootsrap进行connect之前,设置一个handler进去

bootstrap.setPipeline(Channels.pipeline(new ChannelUpstreamHandler(){

@Override

public void handleUpstream(ChannelHandlerContext ctx,

ChannelEvent e) throws Exception {

//DO NOTHING,防止警告,增加系统日志负担

}

}));

我是为了不让他警告,有需求的同学可以自行替换handler,只要有类似这么个handler,就不会有警告;

问题解决,没有贴出全部代码,不过应该解释清楚了,不清楚的,可以联系我

虽然解决了问题,但是感觉应该还有别的解决方式,之前考虑的思路是通过修改log4j的配置文件来达到不输出警告的目的,这个警告是netty内部的,调用的logger.warn,感觉应该是可以通过这种方式实现的,但是始终没有尝试成功,要是哪位仁兄解决了,请赐教

相关推荐