博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:3.技术简介之MinaFilter——LoggingFilter (转)...
阅读量:7022 次
发布时间:2019-06-28

本文共 1869 字,大约阅读时间需要 6 分钟。

 

欢迎阅读我的开源项目与

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);

这是在代码上加了一个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出来,方便于将来的查找。

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

欢迎阅读我的开源项目与

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

 

你可能感兴趣的文章
Response.setContentType()常用参数对应说明
查看>>
kubernetes 中的 Service
查看>>
Windroy—在Windows上运行Android系统
查看>>
读书计划
查看>>
想了解迅雷亲历面试的经历吗:笔试+上机+面试
查看>>
媒体查询
查看>>
手机分辨率有哪些
查看>>
MongoDB的分片集群的安装
查看>>
GuozhongCrawler系列教程 (4) StartContext详解
查看>>
MongoDB java操作的一些记录
查看>>
shell脚本案例
查看>>
Python基础03 序列
查看>>
SpringBoot入门第一节
查看>>
Web语义化
查看>>
[case分享]Exchange 2013 IMAP问题解决历程
查看>>
转:Android之String国际化对照表
查看>>
@ResponseBody处理Clob数据
查看>>
nginx安装
查看>>
Mysql5.6启动报错1067错误解决方法
查看>>
Objective-C 2.0 with Cocoa Foundation---NSObject的奥秘(1)
查看>>