java日誌系統學習--java.util.log.Level

來源:互聯網
上載者:User

記錄層級java.util.log.Level

  java中將日誌是一個比較簡單的對象,只有三個屬性,name,value,resourceBundleName,分別表示日誌的名稱,值和資源檔名稱,日誌分為了以下6個層級,這六個層級在Level中以靜態常量的方式出現(注意該類的構造方法是protected,意味著只有子類中才能使用new來構造該對象,resourceBundleName預設讀取sun.util.logging.resources.logging)

  Level.OFF = new Level("OFF",Integer.MAX_VALUE,defaultBundle)  --這個記錄層級比較特殊,用來關閉日誌

  Level.SEVERE = new Level("SEVERE",1000,defaultBundle)  --系統比較嚴重的錯誤層級,一般是無法恢複的bug

  Level.WARNING = new Level("WARNING",900,defaultBundle)  --警告提示

  Level.INFO = new Level("INFO",800,defaultBundle)  --普通訊息輸出

  Level.CONFIG = new Level("CONFIG",700,defaultBundle)  --靜態配置資訊輸出,如cpu,mem

  Level.FINE = new Level("FINE",600,defaultBundle)  --

  Level.FINER = new Level("FINER",500,defaultBundle)  --

  Level.FINEST = new Level("FINEST",400,defaultBundle) --FINE,FINER,FINEST三個記錄層級都是用來追蹤記錄檔資訊,輸出資訊的詳細程度依次遞增

  Level.ALL = new Level("ALL",Integer.MIN_VALUE,defaultBundle) --所有的日誌資訊都輸出

  學習到了什麼。

  1)對象常量化

    系統中的記錄層級不多,將所有的對象都搞成靜態變數,只要初始化一次,任何時候都能調用了

  2)防止外部程式泛濫調用new來組建記錄檔層級對象

    可以看到Level類的建構函式聲明為protected類型的,就是為了讓外部調用程式直接引用靜態常量而不是用new 來產生自己的對象,同時又保留來該類的可擴充性質,子類依舊可以擴充父類的構造方法來產生對象

  3)記錄層級的遞增/遞減性

    可以看到一個日誌對象的名稱只是對該層級的一個文本描述,而層級的值遵循了從小到大依次遞增的規律,從Integer.MAX_VALUE到Integer.MIN_VALUE,輸出日誌資訊越來越詳細,這種設計的好處可以在程式裡通過很簡單的整數大小判斷來決定輸出哪個層級的日誌,if(level<=Level.ALL){}else if(level <=Level.FINEST){}...

  4)小技巧--Level類中有個靜態方法,把一個字串轉換成一個Level對象,如傳入"INFO"返回Level.INFO,也可以傳入"400",返回Level.FINEST

   public static synchronized Level parse(String name) throws IllegalArgumentException {

name.length();   //--一個檢查null 指標的另類方法


//先通過名稱檢查如傳入的是"INFO"的情況,如果找到了直接返回了

// Look for a known Level with the given non-localized name.

for (int i = 0; i < known.size(); i++) {

   Level l = (Level) known.get(i);

   if (name.equals(l.name)) {

return l;

   }

}


//如果不是類似“INFO”這種格式的,檢查是否是如“400”這樣的

try {

   int x = Integer.parseInt(name);

   for (int i = 0; i < known.size(); i++) {

       Level l = (Level) known.get(i);

if (l.value == x) {

   return l;

}

   }

   // Create a new Level.

   return new Level(name, x);

} catch (NumberFormatException ex) {

   // Not an integer.

   // Drop through.

}


//即不是如“INFO”,又不是"400"格式,檢查資源檔

for (int i = 0; i < known.size(); i++) {

   Level l = (Level) known.get(i);

   if (name.equals(l.getLocalizedName())) {

return l;

   }

}


        // 都不是報錯了

        throw new IllegalArgumentException("Bad level /"" + name + "/"");

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.