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,感觉应该是可以通过这种方式实现的,但是始终没有尝试成功,要是哪位仁兄解决了,请赐教