代碼如下:
import java.util.ArrayList;
import java.util.List;
public class DebugLogger {
/**
* @param args
*/
public static void main(String[] args) {
//測試使用,正式使用的時候可以在一個方法的開始new一個DebugLogger
DebugLogger logger = new DebugLogger();
//模擬需要記錄的十次日誌信息,一次記錄到DebugLogger裏面去了
for(int i = 0;i<10;i++){
//在需要記錄日誌的地方改爲下面的代碼
logger.put("Log info " + i);
}
//到了方法結束或者出現異常的時候,將剛纔記錄的日誌取出來
String[] strings = logger.get();
//將取出來的日誌一次記錄到日誌文件裏去
for (int i = 0; i < strings.length; i++) {
System.out.println(strings[i]);
}
//請空DebugLogger裏記錄的日誌內容
logger.clear();
{
String[] strings1 = logger.get();
for (int i = 0; i < strings1.length; i++) {
System.out.println(strings1[i]);
}
}
}
//內部靜態類,繼承至ThreadLocal
private static class ThreadLocalList extends ThreadLocal {
// 在調用get()方法的時候返回一個ArrayList對象
public Object initialValue() {
return new ArrayList();
}
//將保存在ThreadLocal中的List返回
public List getList() {
return (List) super.get();
}
}
private ThreadLocalList list = new ThreadLocalList();
private static String[] stringArray = new String[0];
//清空記錄的日誌
public void clear() {
list.getList().clear();
}
//將需要記錄的日誌內容保存下來
public void put(String text) {
list.getList().add(text);
}
//返回需要記錄的日誌
public String[] get() {
return (String[]) list.getList().toArray(stringArray);
}
}
在代碼中,您可以調用 DebugLogger.put() 來保存您的程序正在做什麼的信息,而且,稍後如果有必要(例如發生了一個錯誤),您能夠容易地檢索與某個特定線程相關的調試信息。 與簡單地把所有信息轉儲到一個日誌文件,然後努力找出哪個日誌記錄來自哪個線程(還要擔心線程爭用日誌紀錄對象)相比,這種技術簡便得多,也有效得多。