標籤: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 stubMyLog 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;}}}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Java測試序列化資料時的計數策略