第一、Logger.getLogger()和LogFactory.getLog()的區別 1.Logger.getLogger()是使用log4j的方式記錄日志;
2.LogFactory.getLog()則來自apache的common-logging包。
common-logging組件: Jakarta Commons Logging (JCL)提供的是一個日志(Log)接口(interface),同時兼顧輕量級和不依賴于具體的日志實現工具。它提供給中間件/日志工具開發者一個簡單的日志操作抽象,允許程序開發人員使用不同的具體日志實現工具。了解包里情況,可以查看它的API文檔:http://www.oschina.net/uploads/doc/commons-logging-1.1.1/index.html , 其中Log(基本記錄器)和LogFactory(負責創建Log實例)是兩個基類。該API直接提供對下列底層日志記錄工具的支持:Jdk14Logger,Log4JLogger,LogKitLogger,NoOpLogger (直接丟棄所有日志信息),還有一個SimpleLog。 有必要詳細說明一下調用LogFactory.getLog()時發生的事情。調用該函數會啟動一個發現過程,即找出必需的底層日志記錄功能的實現,具體的發現過程在下面列出: ( 換句話說就是, 有這么多工具,common-logging該使用哪一個呢?這取決于系統的設置,common-logging將按以下順序決定使用哪個日志記錄工具:)
(1).common-logging首先在CLASSPATH中查找commons-logging.properties文件。這個屬性文件至少定義org.apache.commons.logging.Log屬性,它的值應該是上述任意Log接口實現的完整限定名稱。如果找到 org.apache.commons.logging.Log屬相,則使用該屬相對應的日志組件。結束發現過程。
(2).如果上面的步驟失敗(文件不存在或屬相不存在),common-logging接著檢查系統屬性org.apache.commons.logging.Log。如果找到org.apache.commons.logging.Log系統屬性,則使用該系統屬性對應的日志組件。結束發現過程。 (3).如果找不到org.apache.commons.logging.Log系統屬性,common-logging接著在CLASSPATH中尋找log4j的類。如果找到了就假定應用要使用的是log4j。不過這時log4j本身的屬性仍要通過log4j.properties文件正確配置。結束發現過程。 (4).如果上述查找均不能找到適當的Logging API,但應用程序正運行在JRE 1.4或更高版本上,則默認使用JRE 1.4的日志記錄功能。結束發現過程。 (5).最后,如果上述操作都失?。↗RE 版本也低于1.4),則應用將使用內建的SimpleLog。SimpleLog把所有日志信息直接輸出到System.err。結束發現過程。
為了簡化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不設置與 commons-logging 相關的系統環境變量,而只需將 Log4j 的 Jar 包放置到 classpash 中就可以了。這樣就很簡單地完成了 commons-logging 與 Log4j 的融合。
根據不同的性質,日志信息通常被分成不同的級別,從低到高依次是:“調試( DEBUG )”“信息( INFO )”“警告( WARN )”“錯誤(ERROR )”“致命錯誤( FATAL )”。
舉例說明:
基于common-logging的運行方式:
基于log4j的運行方式
第二、詳細介紹Log4j
① Log4j的架構 Log4j系統的三大板塊:日志寫入器、日志輸出終端、日志布局模式
Logger類是日志包的核心,Logger的名稱是大小寫敏感的,并且名稱之間有繼承關系。子名由父名做前綴,用點號“.”分隔,如x.y是x.y.z的父親Logger。Logger系統中有個根logger,是所有logger的祖先,它總是存在的,并且不可以通過名字獲取,可以通過Logger.getRootLogger()來獲取。獲取Logger對象的方法很多,可以參考API文檔,在某對象中,用該對象所屬的類作為參數,調用Logger.getLogger(Class clazz)以獲取logger對象被認為是目前所知最理智的命名logger方法。
②Log4j的日志級別(Level) 每個logger都有一個日志級別,用來控制日志的輸出。未分配級別的logger將自動繼承它最近的父logger的日志級別。Logger的由低到高級別如下: ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF
③Log4j的輸出終端(Appender接口)
Log4j提供了以下幾個實現:
默認情況下,子logger將繼承父logger的所有appenders。
④Log4j的輸出布局模式(Layout接口) Log4j提供Layout有以下幾種:
Log4j采用類似C語言中的printf函數的打印格式格式化日志信息。打印參數如下:
⑤Log4j的配置
在實際使用中,Log4j一般是通過配置文件配置使用的。配置文件有兩種,Java properties和XML文件。一般都選用properties文件來配置,因為簡潔易讀。下面只介紹Java properties的配置方式。 對Log4j的配置就是對rootLogger和子Logger的配置。主要的配置項為:rootLogger、輸出終端、輸出布局模式,所有的配置項都必須以log4j開頭。 配置文件的示例
本文內容來自于好幾位網友的博客,在此對他們表示感謝
posted on 2012-12-26 00:45 奮斗成就男人 閱讀(6046) 評論(0) 編輯 收藏
Powered by: BlogJava Copyright © 奮斗成就男人