日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 服務器 > 基于Java的開源日志庫log4j調研筆記

基于Java的開源日志庫log4j調研筆記

來源:程序員人生   發布時間:2015-07-22 23:20:32 閱讀次數:3856次

由于Hadoop生態鏈基本都是java開發的,所以在很多有關大數據處理的開源項目中,常常會看到log4j這個jar包。
本文旨在對它的用法做基本說明。

1. log4j是甚么
從log4j的命名(log for java)不難看出,它是為java提供的日志庫。具體而言,它是Apache基金會下的開源項目,它可在不修改利用程序代碼的條件下,在程序運行時提供靈活的日志打印功能(固然,利用程序還是必須在代碼中調用log4j進行打印,但程序發布后,可以通過配置文件控制日志輸出目的地及允許輸出的日志等級)。
不管用哪一種語言開發的利用,大量的verbose日志總是會下降程序性能,不過,log4j在設計/實現時已做了很多優化以便盡可能減少對利用程序的性能影響,它的主旨是"speed first, flexibility second",關于log4j性能方面需斟酌的問題,可參考這里的說明。
關于log4j的更多特性,可以通過查看log4j FAQ來了解:What are the features of log4j?"

2. log4j的3要素
log4j存在3個重要概念:loggers, appenders和layouts,這3個要素使得引入log4j庫的開發者可以靈活控制打印行動,如日志等級、日志內容、日志格式及打印目的地(如本地或遠程打印),等等。
2.1 loggers
事實上,loggers是1些大小寫敏感的命名實體,這些實體的命名遵守以下的層級命名規則(細節可查看文檔Short introduction to log4j)
A logger is said to be an ancestor of another logger if its name followed by a dot is a prefix of the descendant logger name. A logger is said to be a parent of a child logger if there are no ancestors between itself and the descendant logger.
在loggers的層級結構中,root logger處于最頂級。使用log4j庫時,root logger必須被創建且只能通過類靜態方法Logger.getRootLogger來創建,而其它logger可以通過傳入logger name調用類靜態方法Logger.getLogger來實例化。 
可以為logger實例指定日志等級(如通過setLevel接口),目前支持這些經常使用等級:TRACE, DEBUG, INFO, WARN, ERROR, FATAL。不斟酌TRACE,其余等級的重要程度順次為:DEBUG < INFO < WARN < ERROR < FATAL
若某個logger實例沒有顯式指定等級,則它會繼承距離它最近的、被顯式指定過日志等級的父logger實例的等級。
1旦為某個logger實例指定了等級,則調用該實例打印日志時,只有日志等級不小于指定等級的日志會被打印,低于指定等級的日志不會被打印出來。這個規則是log4j庫的核心規則,它保證了日志等級的靈活控制
2.2 appenders
appenders其實就是日志打印的目的地址(In log4j speak, an output destination is called an appender),目前支持的appenders包括:console, files, GUI components, remote socket servers, JMS, NT Event Loggers, and remote UNIX Syslog daemons。
1個logger實例可以有多個appender(s),即同1條日志可以同時打印到多個目的地。
默許情況下,某logger實例的日志打印要求會打印到已為該logger實例添加的所有appenders上,另外,該日志打印要求還會沿著logger實例的層級繼承鏈向上傳播給其先人logger的所有appenders
例如,為root logger添加console類型的appender后,root logger的日志打印要求會輸出到console,這很容易理解。現在假定logger實例C繼承自root,且為實例C添加了file類型的appender,則調用實例C進行日志打印時,除file appender會輸出日志外,實例C的先人,即本例中的root logger也會收到該日志打印要求,由于root logger添加了console appender,所以,console appender也會輸出日志。這個默認行動可以通過將logger的additive字段設置為false來關閉。
關于appender additivity的更多說明及示例,可以參考Short introduction to log4j這篇文檔關于Appender部份的說明。
2.3 layouts
layouts可以指定日志的格式,支持的PatternLayout在文檔log4j - Class PatternLayout中有詳細說明,這里不贅述。

3. log4j的配置
log4j日志庫的配置可以在java程序中通過代碼指定,也能夠通過配置文件來指定并隨著java利用的啟動被初始化。明顯后者更加靈活。
下面是1個典型的log4j配置文件:
log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
該配置文件中,只指定了1個logger實例(即root logger),其最低日志等級是DEBUG,添加了2個appender(分別命名為stdout和R)。然后為兩個appender name分別指定了log4j真正支持的appender(分別為ConsoleAppender和RollingFileAppender),每一個appender都可以通過layout指定各自的日志格式。

4. log4j庫的初始化進程
log4j不對它的使用處景做任何假定,因此,它沒有默許的appender,也即,appender必須由使用者顯式配置。援用了log4j庫的java進程啟動時,JVM的classloader機制會對利用程序援用到的Logger類進行加載,而該類的靜態初始化函數會嘗試自動配置log4j。log4j庫默許的初始化進程在文檔Short introduction to log4j的"Default Initialization Procedure"部份有詳細說明,感興趣的同學可以去查看。
備注:關于JVM加載class(如系統包或第3方擴大包)的機制,可以通過下面幾篇文檔來理解:
1) Understanding the Java Classloading Mechanism
2) Understanding Extension Class Loading
3) Internals of Java Class Loading

【參考資料】
1. log4j FAQ: What are the features of log4j?
2. Short introduction to log4j: Ceki Gülcü, March 2002
3. log4j docs: Class PatternLayout
4. Understanding the Java Classloading Mechanism
5. Java Docs:  Understanding Extension Class Loading
6. Internals of Java Class Loading

========================= EOF ========================


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 91精品国产综合久久久久 | 免费av 在线 | 久久久观看 | 黄网站观看 | 中文字幕在线一区二区三区 | 成人午夜精品 | 国产理论| 色一乱一伦一图一区二区精品 | 日韩毛片免费视频一级特黄 | 日韩欧美国产成人 | 日韩国产精品一区 | 精品国产乱码久久久久久牛牛 | 日韩一区二区精品视频 | 国产一区二区视频在线 | 国产三级久久久 | 日日噜噜噜夜夜爽爽狠狠视频, | 99精品国产高清一区二区麻豆 | 可以在线观看的av网站 | 日韩欧美网 | 丁香久久五月 | 久久久97| www.免费av | 一区二区三区在线视频播放 | 激情在线视频 | 男女羞羞免费视频 | 日皮视频免费观看 | 国产黄色三级毛片 | 亚洲第一视频网站 | 国产精品福利在线 | 污视频网站免费 | 亚洲毛茸茸少妇高潮呻吟 | 91精品国产91综合久久蜜臀 | 欧美专区一区 | 国产在线视频一区 | 亚洲精品综合网 | 亚洲国产精品国自产拍av秋霞 | 国产精品久久精品 | 国产精品国产a级 | 午夜亚洲 | 久久精品网 | 中文字幕在线观看一区二区三区 |