Java測試序列化數據時的計數策略

近日測試中遇到一個需求,要使用程序不斷地去監測指定的服務組件是否正在運行,一分鐘檢測一次,如果發現異常,就要將異常的信息捕獲出來,然後記錄到日誌中,供開發人員排查。

可是在執行的過程中,發現一個問題,產生的日誌在記入文件的時候,沒有明確的行列標記,非常不便於操作,而且日誌是追加模式的,在分類的情況下,要按分類查找更加困難。比如:

總共產生了1W條日誌,info級別的8000條,error級別的500條,warning級別1500條,怎麼樣才能很好的組織這些數據,便於找出BUG,便於篩選呢?

我用了兩套序數操縱這些數據,一套序數是每個類別的日誌,有一個自己的序號,同時,還有一個全局的日誌序號,這種情況下,不同的業務單元中產生的日誌,只要推送到我這個單一的進程中,就能實現全局排序記錄,局部也有序列,並且保存到了同一個文件中,便於集中處理。

實現如下:

/**
 * 
 */
package com;

/**
 * @author Administrator
 *
 */
public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MyLog log1 = new MyLog();
		MyLog log2 = new MyLog();
		MyLog log3 = new MyLog();
		MyLog log4 = new MyLog();
		MyLog log5 = new MyLog();
		
		log1.write(1, "running");
		log1.write(2, "reopen");
		
		log2.write(1, "starting");
		log2.write(3, "crashed");
		log2.write(1, "resume");
		
		log3.write(1, "stoped");
		
		log4.write(1, "prompt");
		
		log5.write(2, "network failed");
		log5.write(1, "network normal");
		log5.write(2, "thread crash");
		log5.write(3, "connect failed");
	}

}
class MyLog {
	private static int nSerialNo = 0;
	
	// 0是info級別,1是warning級別,2是error級別
	final int INFO_TYPE = 0;
	final int WARNNING_TYPE = 1;
	final int ERROR_TYPE = 2;
	
	static int nInfoNo = 0;			// 局部序號
	static int nWarnningNo = 0;
	static int nErrorNo = 0;
			
	private int nGolobalNo = 0;		// 全局序號

	private String strMsg = "";		// 日誌消息
	
	public void write(int type, String msg) {
		strMsg = msg;
		nGolobalNo = (++nSerialNo);
		
		// 0是info級別,1是warning級別,2是error級別
		switch (type) {
		case INFO_TYPE:
			System.out.println("Log[info][" + nGolobalNo + "]" + "[" + (++nInfoNo) + "]:" + strMsg);
			break;
		case WARNNING_TYPE:
			System.out.println("Log[warning][" + nGolobalNo + "]" + "[" + (++nWarnningNo) + "]:" + strMsg);
			break;
		case ERROR_TYPE:
			System.out.println("Log[error][" + nGolobalNo + "]" + "[" + (++nErrorNo) + "]:" + strMsg);
			break;
		default:
			System.out.println("Log[unknow][" + nGolobalNo + "]" + "[" + "-" + "]:" + strMsg);
			break;
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章