【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:3.技术简介之MinaFilter——LoggingFilter (转)

 

欢迎阅读我的开源项目《迷你微信》服务器《迷你微信》客户端

LoggingFilter

接下来,使我们对Filter介绍的最后一个——LoggingFilter。

与ProtocolCodecFilter一样,LoggingFilter也是加在网络层之间,而博主的项目中,将LoggingFilter加在ProtocolCodecFilter之后,也就是说,在服务器发送数据包时,将先经过MinaEncoder进行编码为byte数组,接着到达LoggingFilter。

使用原因

在一个不小的项目中,将程序的一些状态如:成功连接、开始处理,完成处理,处理异常,发送数据等记录在一个独立的文件中,是非常重要的,因为当程序发生异常时,可以很清晰的追踪到异常的发生地点;也可以用来统计服务器的访问密度,和分部;甚至于,在服务器被攻击时,可以根据log文件查清对方的IP,和操作(当然,博主自己的项目还没有防黑客那么牛逼的功能。)

Log4j

log4j,可以理解为Log for Java,很明显,这是一个针对Java的Log工具,博主在自己的项目《迷你微信》服务器中,使用了大量的Log,就是用的Log4j实现的,它可以在Log的时候显示时间戳,设置输出等级(如debug、Info、Error等),这是要显示的输出等级(即设置为Info等级时,debug等级的输出将被无视,Info和Error等级将被输出),很好的应对了不同的需求,在寻找要错误时减少干扰输出。在这里,博主简单的介绍一下Log4j的代码使用,配置方法就不赘叙了: (代码来自开源项目《迷你微信》服务器)

public class Test {
	private Logger logger = Logger.getLogger(this.getClass());

	public Test(){
		logger.Info("This is a log!");
	}
}

开始使用LoggingFilter

(代码来自开源项目《迷你微信》服务器

	// 自己写的,负责处理网络层回调的类
        MinaServerHandle minaServerHandle = new MinaServerHandle
        // 建立一个NIO(非阻塞)的连接
        acceptor = new NioSocketAcceptor();
        // 添加 ProtocolCodecFilter
	acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new MinaEncoder(), new MinaDecoder()));
	// 添加Log的Filter
	MyLogger myLogger = new MyLogger();
	acceptor.getFilterChain().addLast("Logger", myLogger);
        acceptor.setHandler(minaServerHandle);

这是在Mina连接代码上加了一个LoggingFilter而已,再看看博主对MyLogger的实现:

public class MyLogger extends LoggingFilter {
	private Logger logger = Logger.getLogger(this.getClass());
	@Override
	public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
		super.messageSent(nextFilter, session, writeRequest);
		logger.Info("在此输出要输出的内容:" + writeRequest.toString());
	}

MyLogger 类继承于LoggingFilter 类,覆盖父类的messageSent方法,messageSent方法将在每次向IO写时自动调用,在这里,我们输出了几个无意义的log,大家可以按照自己的需求,将每次服务器网客户端传输的包的详细内容(如:IP,请求内容)Log出来,方便于将来的查找。

想看看博主如何使用这个模块,请参考GitHub源码

欢迎阅读我的开源项目《迷你微信》服务器《迷你微信》客户端

http://www.cnblogs.com/xiaozefeng/p/mina_wechat_Java_3.html

 

【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:3.技术简介之MinaFilter——LoggingFilter (转)

上一篇:小程序之选项卡切换(纵向)


下一篇:微信开发书籍推荐