1. 程式人生 > >java中的日誌檔案補充點

java中的日誌檔案補充點

        首先我們思考一下日誌是為了解決啥產生的,要求日誌又是怎麼樣的?

       一日誌是用來除錯的,那麼就需要記錄程式當前的執行狀態和程式之前的執行狀態,那麼日誌檔案不僅要能夠輸出到控制檯還要能夠輸出到檔案,甚至能夠有郵件的形式通知開發人員。二、定位錯誤。要求日誌具備靈活性,可以讓開發人員人員針對不同的類,不同的包,不同程度的錯誤輸出到不同的檔案中,日誌應該是可以針對不同的需求分級的,純debug環境和線上的生產環境是不一樣的,這樣才能更快更方便查詢問題。三、進行資料分析,通過日誌去分析使用者資料,這樣日誌就需要是能夠變成多文字的HTML的,TXT的,XML等各種型別方便資料分析。

     我們會發現日誌類最少有兩個特性擁有時間戳和記錄檔案,它被叫做LoggerEven,而因為要有輸出的地方所以採用Appender(可不段追加)來表示輸出的目的地,作用於控制檯的為SystemOutAppender,作用於檔案的為FileAppender,作用與郵件的為SMTPAppender。之後要求要表現形式多樣化嘛,就採用了Formatter來做這件格式化的事情,針對文字類即為SimmpleFormatter,對於HTML的就是HTMLFormatter剩下XML格式的,我想聰明的你必然猜到了,那就是XMLFormatter。那不同的class和package,你會想到什麼方法來設計呢?不得不感嘆前人的智慧與實力,直接在獲取Logger的時候將class或者package帶上,並且利用Appender來輸出,而一個Logger可以有多個Appender,也就是Logger.addAppender(new XXXAppender("XXX"))返回的是一個list。忍不住貼上一張圖:

接下來最後一個就是要按照不同的場景讓不同的日誌輸出到不同的地方,就是給日誌分級,採用了Priority類,其中定義了五個級別:Debug,Info,Warm,Error,Fatal這從級別是低到高排序的,就能直接使用Logger.debug(),Logger.info() ...等來輸出日誌,針對特殊情況需要將所有的error日誌輸出到error.log檔案中,會發現在Appender裡有一個priority的屬性,如果這個屬性被賦值就能夠直接定義輸出的檔案了。比如想要輸出的日誌級別是debug的,而有一個檔案的FileAppender的priority是info那麼就會輸出到這個File上。道理你一定懂!然後可以大神Ceki Gülcü發現Appender,Logger,Formatter 互相不影響,可擴充套件性強就命名為log4j(Logger for Java),在之後設計了loggerback工具,併為了方便使用者切換使用日誌設定了slf4j的抽象層,使用者通過適配層呼叫slf4j的api即可。