使用JDK Logging

使用JDK Logging

在編寫程序的過程中桃漾,發(fā)現(xiàn)程序運行結(jié)果與預(yù)期不符立莉,怎么辦瑞你?當(dāng)然是用System.out.println()打印出執(zhí)行過程中的某些變量糠惫,觀察每一步的結(jié)果與代碼邏輯是否符合蚪缀,然后有針對性地修改代碼鲜滩。

  • 代碼改好了怎么辦搭独?當(dāng)然是刪除沒有用的System.out.println()語句了炸客。
  • 如果改代碼又改出問題怎么辦?再加上System.out.println()戈钢。
  • 反復(fù)這么搞幾次,很快大家就發(fā)現(xiàn)使用System.out.println()非常麻煩殉了。

怎么辦?解決方法是使用日志。那什么是日志众弓?日志就是Logging,它的目的是為了取代System.out.println()谓娃。

輸出日志脚乡,而不是用System.out.println()滨达,有以下幾個好處:

  1. 可以設(shè)置輸出樣式,避免自己每次都寫"ERROR: " + var捡遍;
  2. 可以設(shè)置輸出級別锌订,禁止某些級別輸出。例如画株,只輸出錯誤日志辆飘;
  3. 可以被重定向到文件,這樣可以在程序運行結(jié)束后查看日志谓传;
  4. 可以按包名控制日志級別蜈项,只輸出某些包打的日志;
  5. 可以……

那如何使用日志续挟?因為Java標(biāo)準(zhǔn)庫內(nèi)置了日志包java.util.logging紧卒,我們可以直接用。先看一個簡單的例子:

// logging
import java.util.logging.Level;
import java.util.logging.Logger;
public class Hello {
    public static void main(String[] args) {
        Logger logger = Logger.getGlobal();
        logger.info("start process...");
        logger.warning("memory is running out...");
        logger.fine("ignored.");
        logger.severe("process will be terminated...");
    }
}

//Mar 02, 2019 6:32:13 PM Hello main
//INFO: start process...
//Mar 02, 2019 6:32:13 PM Hello main
//WARNING: memory is running out...
//Mar 02, 2019 6:32:13 PM Hello main
//SEVERE: process will be terminated...

對比可見庸推,使用日志最大的好處是常侦,它自動打印了時間、調(diào)用類贬媒、調(diào)用方法等很多有用的信息聋亡。

再仔細觀察發(fā)現(xiàn),4條日志际乘,只打印了3條坡倔,logger.fine()沒有打印。這是因為脖含,日志的輸出可以設(shè)定級別罪塔。JDK的Logging定義了7個日志級別,從嚴(yán)重到普通:

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

因為默認(rèn)級別是INFO养葵,因此征堪,INFO級別以下的日志,不會被打印出來关拒。使用日志級別的好處在于佃蚜,調(diào)整級別庸娱,就可以屏蔽掉很多調(diào)試相關(guān)的日志輸出。

使用Java標(biāo)準(zhǔn)庫內(nèi)置的Logging有以下局限:

  • Logging系統(tǒng)在JVM啟動時讀取配置文件并完成初始化谐算,一旦開始運行main()方法熟尉,就無法修改配置;
  • 配置不太方便洲脂,需要在JVM啟動時傳遞參數(shù)-Djava.util.logging.config.file=<config-file-name>斤儿。

因此,Java標(biāo)準(zhǔn)庫內(nèi)置的Logging使用并不是非常廣泛恐锦。更方便的日志系統(tǒng)我們稍后介紹往果。

小結(jié)

  • 日志是為了替代System.out.println(),可以定義格式踩蔚,重定向到文件等棚放;
  • 日志可以存檔枚粘,便于追蹤問題馅闽;
  • 日志記錄可以按級別分類,便于打開或關(guān)閉某些級別馍迄;
  • 可以根據(jù)配置文件調(diào)整日志福也,無需修改代碼;
  • Java標(biāo)準(zhǔn)庫提供了java.util.logging來實現(xiàn)日志功能攀圈。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暴凑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赘来,更是在濱河造成了極大的恐慌现喳,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件犬辰,死亡現(xiàn)場離奇詭異嗦篱,居然都是意外死亡,警方通過查閱死者的電腦和手機幌缝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門涵卵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人典鸡,你說我怎么就攤上這事÷茜瑁” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵亦渗,是天一觀的道長。 經(jīng)常有香客問我法精,道長痴突,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任帮碰,我火速辦了婚禮拾积,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斯碌。我一直安慰自己,他們只是感情好傻唾,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布冠骄。 她就那樣靜靜地躺著,像睡著了一般凛辣。 火紅的嫁衣襯著肌膚如雪锁荔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天跋理,我揣著相機與錄音恬总,去河邊找鬼。 笑死壹堰,一個胖子當(dāng)著我的面吹牛骡湖,可吹牛的內(nèi)容都是我干的峻厚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼浦夷,長吁一口氣:“原來是場噩夢啊……” “哼辜王!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肥缔,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤汹来,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后姑宽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遣耍,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡舵变,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赊豌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绵咱。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艾恼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钠绍,我是刑警寧澤花沉,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布媳握,位于F島的核電站蛾找,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腋粥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一隘冲、第九天 我趴在偏房一處隱蔽的房頂上張望绑雄。 院中可真熱鬧,春花似錦罗珍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至团南,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吐根,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工局义, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冗疮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓穷绵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仲墨。 傳聞我的和親對象是個殘疾皇子勾缭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348