【迷你微信】基於MINA、Hibernate、Spring、Protobuf的即時聊天系統:3.技術簡介之MinaFilter(2)——LoggingFilter


項目Logo
歡迎閱讀我的開源項目《迷你微信》服務器《迷你微信》客戶端

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源碼

歡迎閱讀我的開源項目《迷你微信》服務器《迷你微信》客戶端


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM