JDK自帶的log工具

Java.util.logging:JDK標(biāo)準(zhǔn)庫中的類,是JDK 1.4 版本之后添加的日志記錄的功能包。
Java Logging API提供了七個(gè)日志級(jí)別用來控制輸出。

級(jí)別 調(diào)用方法 含義
SEVERE severe() 嚴(yán)重
WARNING warning() 警告
INFO info() 信息
CONFIG config() 配置
FINE fine() 良好
FINER finer() 較好
FINEST finest() 最好
相關(guān)術(shù)語
1. logger
  • 代碼需要輸入日志的地方都會(huì)用到Logger,這幾乎是一個(gè)JDK logging模塊的代言人,我們常常用Logger.getLogger("com.aaa.bbb");獲得一個(gè)logger,然后使用logger做日志的輸出。
  • logger其實(shí)只是一個(gè)邏輯管理單元,其多數(shù)操作都只是作為一個(gè)中繼者傳遞別的角色,比如說:Logger.getLogger(“xxx”)的調(diào)用將會(huì)依賴于LogManager類,使用logger輸入日志信息的時(shí)候會(huì)調(diào)用logger中的所有handler進(jìn)行日志的輸入。
  • logger是有層次關(guān)系的,每個(gè)logger通常以java包名為其名稱。子logger通常會(huì)從父logger繼承l(wèi)ogger級(jí)別、handler、Resource等。
    整個(gè)JVM會(huì)存在一個(gè)名稱為空的root logger,所有匿名的logger都會(huì)把root logger作為其父。
LogManager
  • 整個(gè)JVM內(nèi)部所有l(wèi)ogger的管理,logger的生成、獲取等操作都依賴于它,也包括配置文件的讀取。LogManager中會(huì)有一個(gè)Hashtable[private Hashtable<String,WeakReference<Logger>> loggers]用于存儲(chǔ)目前所有的logger,如果需要獲取logger的時(shí)候,Hashtable已經(jīng)有存在logger的話就直接返回Hashtable中的,如果hashtable中沒有l(wèi)ogger,則新建一個(gè)同時(shí)放入Hashtable進(jìn)行保存。
2. Handler
  • 用來控制日志輸出的,比如JDK自帶的ConsoleHanlder把輸出流重定向到System.err輸出,每次調(diào)用Logger的方法進(jìn)行輸出時(shí)都會(huì)調(diào)用Handler的publish方法,每個(gè)logger有多個(gè)handler。我們可以利用handler來把日志輸入到不同的地方(比如文件系統(tǒng)或者是遠(yuǎn)程Socket連接).
3. Formatter
  • 日志在真正輸出前需要進(jìn)行一定的格式化:比如是否輸出時(shí)間?時(shí)間的格式?是否輸入線程名?是否使用國際化信息等。
4. Log Level
  • JDK Logging把日志分為如下幾個(gè)級(jí)別,等級(jí)依次升高。all→finest→finer→fine→config→info→warning→server→off,如果將級(jí)別設(shè)為info,那么info之前的低級(jí)別信息將不會(huì)輸出,只有info級(jí)別只有的信息會(huì)輸出,通過控制級(jí)別達(dá)到控制輸出的目的。需要注意,不僅是logger具有級(jí)別,handler也是有級(jí)別,也就是說如果某個(gè)logger級(jí)別是FINE,客戶希望輸入FINE級(jí)別的日志,如果此時(shí)logger對(duì)應(yīng)的handler級(jí)別為INFO,那么FINE級(jí)別日志仍然是不能輸出的。
對(duì)應(yīng)關(guān)系
  1. LogManager與logger是1對(duì)多關(guān)系,整個(gè)JVM運(yùn)行時(shí)只有一個(gè)LogManager,且所有的logger均在LogManager中。
  2. logger與handler是多對(duì)多關(guān)系,logger在進(jìn)行日志輸出的時(shí)候會(huì)調(diào)用所有的hanlder進(jìn)行日志的處理。
  3. handler與formatter是一對(duì)一關(guān)系,一個(gè)handler有一個(gè)formatter進(jìn)行日志的格式化處理。
  4. 很明顯:logger與level是一對(duì)一關(guān)系,hanlder與level也是一對(duì)一關(guān)系 。
簡單使用
public class LogJDKTest{
    public static Logger log = Logger.getLogger(LogJDKTest.class.getName());

    public static void main(String[] args){
        // all→finest→finer→fine→config→info→warning→server→off
        // 級(jí)別依次升高,后面的日志級(jí)別會(huì)屏蔽之前的級(jí)別
        log.setLevel(Level.INFO);
        log.finest("finest");
        log.finer("finer");
        log.fine("fine");
        log.config("config");
        log.info("info");
        log.warning("warning");
        log.severe("server");
    }
}
public class LogJDKTest{
    public static Logger log = Logger.getLogger(LogJDKTest.class.toString());
 
    static{
        // new一個(gè)控制臺(tái)處理器
        Handler console = new ConsoleHandler();
        // 給處理器設(shè)置級(jí)別
        console.setLevel(Level.SEVERE);
        // 給logger設(shè)置處理器
        log.addHandler(console);
    }
 
    public static void main(String[] args){
        log.setLevel(Level.INFO);
        log.finest("finest");
        log.finer("finer");
        log.fine("fine");
        log.config("config");
        log.info("info");
        log.warning("warning");
        log.severe("server");
    }
 
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作為一個(gè)有追求的程序猿,你了解你見到的各種日志嗎?JDK的日志、Tomcat的日志、還有Logback的日志,他們...
    帥可兒妞閱讀 3,076評(píng)論 0 1
  • idea 添加注釋/** 然后回車 選中代碼塊 Ctrl+Shift+/ 重點(diǎn)推薦閱讀:https://www....
    Helen_Cat閱讀 20,485評(píng)論 0 37
  • logging介紹Python的logging模塊提供了通用的日志系統(tǒng),可以方便第三方模塊或者是應(yīng)用使用。這個(gè)模塊...
    modingfa閱讀 6,989評(píng)論 0 2
  • 一、給路由添加正則表達(dá)式 給路由參數(shù)添加正則表達(dá)式的原因:在實(shí)際開發(fā)時(shí),url中往往會(huì)帶有很多的參數(shù),例如:/ad...
    IIronMan閱讀 1,763評(píng)論 1 12
  • 在現(xiàn)實(shí)生活中,記錄日志非常重要。銀行轉(zhuǎn)賬時(shí)會(huì)有轉(zhuǎn)賬記錄;飛機(jī)飛行過程中,會(huì)有黑盒子(飛行數(shù)據(jù)記錄器)記錄飛行過程中...
    chliar閱讀 883評(píng)論 1 0

友情鏈接更多精彩內(nèi)容