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

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 (转)的更多相关文章

  1. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:0.概述

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 序言 帖主和队友仿制了一个简单版的微信,其中,队友是用Unity3D做前段,帖主用Java的Mina.Hiberna ...

  2. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...

  3. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:9.观察者模式

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 在一个程序的迭代过程中,复杂度渐渐上升,可能会出现一些跨模块的调用的需求,若是直接得到引用来进行使用,会导致模 ...

  4. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:8.自定义传输协议

    欢迎阅读我的开源项目<迷你微信>服务器)与<迷你微信>客户端 前言 在上一篇中,我们讲到了<迷你微信>服务器)的主体架构,还讲到了如何在现有功能上进行拓展,但是拓展 ...

  5. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:6.技术简介之Protobuf

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 protocolbuffer(以下简称Protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平 ...

  6. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:5.技术简介之Hibernate

    目录 序言 配置 hibernate.cfg.xml配置文件 加载hibernate.cfg.html配置文件并获取Session 对象的注解配置 增删改查 具体的增删改查代码 数据库操作的封装 连接 ...

  7. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统 :1.技术简介之Mina连接

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 Apache MINA(Multipurpose Infrastructure for Network Applic ...

  8. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:4.技术简介之Spring

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 Spring是一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...

  9. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:10.项目介绍之架构(2)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 前面我们讲到<迷你微信>服务器端的主架构,现在我们来描述一下它的模块详细信息. 网络模块 从上图我 ...

随机推荐

  1. ThinkPhp学习13

    原文:ThinkPhp学习13 简单登录验证 创建Login类 <?php class LoginAction extends Action { function index(){ $this- ...

  2. uva--562Dividing coins +dp

    题意: 给定一堆硬币,然后将他们分成两部分,使得两部分的差值最小;输出这个最小的差值. 思路: 想了好久都没想到一个合适的状态转移方程.后面看了别人的题解后,才知道能够转成背包问题求解. 我们将全部的 ...

  3. - Shell - sort处理大文件(页 1) - ChinaUnix.net

    - Shell - sort处理大文件(页 1) - ChinaUnix.net sort处理大文件

  4. HBase总结(二十)HBase经常使用shell命令具体说明

    进入hbase shell console $HBASE_HOME/bin/hbase shell 假设有kerberos认证,须要事先使用对应的keytab进行一下认证(使用kinit命令),认证成 ...

  5. 【Struts2学习笔记(11)】对action的输入校验和XML配置方式实现对action的全部方法进行输入校验

    在struts2中,我们能够实现对action的全部方法进行校验或者对action的指定方法进行校验. 对于输入校验struts2提供了两种实现方法: 1. 採用手工编写代码实现. 2. 基于XML配 ...

  6. Android支付接入(七):Google In-app-Billing

    前段时间有事请耽搁了,今天跟大家一起看下Google的in-app Billing V3支付.    如果没有Google Play此处附上安装Google Play的一键安装器的链接(需要Root权 ...

  7. 使用EXCEL设置“下拉菜单”选项功能

    原创作品.出自 "深蓝的blog" 博客.欢迎转载.转载时请务必注明出处,否则有权追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  8. jquery在元素上收购事件

    jquery的给元素绑定的事件能够用data方法取出来 通过$(element).data("events")来获取 // 比方给一个button绑定两个click事件 $(&qu ...

  9. configure: error: zlib not installed

    export LDFLAGS="-L/usr/local/zlib/lib" export CPPFLAGS="-I/usr/local/zlib/include&quo ...

  10. 对付"反盗链"

    对付"反盗链" 某些站点有所谓的反盗链设置,其实说穿了很简单, 就是检查你发送请求的header里面,referer站点是不是他自己, 所以我们只需要像把headers的refer ...