利用ThreadLocal記錄日誌

來源:互聯網
上載者:User


利用ThreadLocal記錄日誌
reverocean 原創  (參與分:9727,專家分:822)   發表:2006-02-08 16:41   版本:1.0   閱讀:353

   在項目中記錄日誌是必須的,但是往往在記錄日誌的時候都是通過logger.debug("...")來記錄的,程式一邊運行一邊記錄日誌,尤其在多線程或者Web應用中,同一時間可能有不同的日誌記錄到同一個檔案中去,當出現錯誤的時候就不能確定在那些資訊是你想關心的.因此如果我們在一個程式的開始的地方開始記錄日誌,但是這個日誌不記錄到記錄檔中,而是儲存在一個ThreadLocal中,在出錯的時候就可以將這些日誌全部輸出到記錄檔中去,就能方便尋找了.
代碼如下:
 
 
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() 來儲存您的程式正在做什麼的資訊,而且,稍後如果有必要(例如發生了一個錯誤),您能夠容易地檢索與某個特定線程相關的調試資訊。 與簡單地把所有資訊轉儲到一個記錄檔,然後努力找出哪個日誌記錄來自哪個線程(還要擔心線程爭用日誌紀錄對象)相比,這種技術簡便得多,也有效得多。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.