如何以正確的姿勢和動作寫日誌呢?
簡單的說,日誌就是記錄程序的運行軌跡,方便查找關鍵信息,也方便快速定位解決問題。
我們 Java 程序員在開發項目時都是依賴 Eclipse/ Idea 等開發工具的 Debug 調試功能來跟蹤解決 Bug,在開發環境可以這麼做,但項目發布到了測試、生產環境呢?
你有可能會說可以使用遠程調試,但實際並不能允許讓你這麼做。
所以,日誌的作用就是在測試、生產環境沒有 Debug 調試工具時開發、測試人員定位問題的手段。
1、常用日誌框架
log4j、Logging、commons-logging、slf4j、logback,開發的同學對這幾個日誌相關的技術不陌生吧,為什麼有這麼多日誌技術,它們都是什麼區別和聯繫呢?相信大多數人搞不清楚它們的關係,下面我將一一介紹一下,以後大家再也不用傻傻分不清楚了。
2、Logging
如圖所示,這是 Java 自帶的日誌工具類,在 JDK 1.5 開始就已經有了,在 java.util.logging 包下。
3、SLF4J
全稱:Simple Logging Facade for Java,即簡單日誌門面介面,和 Apache 的 commons-logging 是一樣的概念,它們都不是具體的日誌框架,你可以指定其他主流的日誌實現框架。
Slf4j 也是現在主流的日誌門面框架,使用 Slf4j 可以很靈活的使用佔位符進行參數佔位,簡化代碼,擁有更好的可讀性,這個後面會講到。
4、Logback
Logback 是 Slf4j 的原生實現框架,同樣也是出自 Log4j 一個人之手,但擁有比 log4j 更多的優點、特性和更做強的性能,現在基本都用來代替 log4j 成為主流。
為什麼 Logback 會成為主流?
無論從設計上還是實現上,Logback相對log4j而言有了相對多的改進。不過儘管難以一一細數,這裡還是列舉部分理由為什麼選擇logback而不是log4j。
牢記logback與log4j在概念上面是很相似的,它們都是有同一群開發者建立。所以如果你已經對log4j很熟悉,你也可以很快上手logback。如果你喜歡使用log4j,你也許會迷上使用logback。
更快的執行速度
基於我們先前在log4j上的工作,logback 重寫了內部的實現,在某些特定的場景上面,甚至可以比之前的速度快上10倍。在保證logback的組件更加快速的同時,同時所需的內存更加少。
日誌框架總結
commons-loggin、slf4j 只是一種日誌抽象門面,不是具體的日誌框架。
log4j、logback 是具體的日誌實現框架。
一般首選強烈推薦使用 slf4j + logback。當然也可以使用slf4j + log4j、commons-logging + log4j 這兩種日誌組合框架。
從上圖可以看出 slf4j 很強大吧,不但能和各種日誌框架對接,還能和日誌門面 commons-logging 進行融合。
日誌級別詳解
日誌的輸出都是分級別的,不同的設置不同的場合列印不同的日誌。下面拿最普遍用的 Log4j 日誌框架來做個日誌級別的說明,這個也比較奇全,其他的日誌框架也都大同小異。
Log4j 的級別類 org.apache.log4j.Level 裡面定義了日誌級別,日誌輸出優先順序由高到底分別為以下8種。
所以,日誌優先順序別標準順序為:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
如果日誌設置為 L ,一個級別為 P 的輸出日誌只有當 P >= L 時日誌才會輸出。
即如果日誌級別 L 設置 INFO,只有 P 的輸出級別為 INFO、WARN,後面的日誌才會正常輸出。
推薦閱讀:
※如何使用 syslog-ng 從遠程 Linux 機器上收集日誌
※搜索引擎背後的原理和中文日誌檢索
※技術乾貨 | 日誌易產品總監饒琛琳:數據驅動的智能運維平台
※廣告日誌系統日誌回溯時長的分析
TAG:日誌分析 |