多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > 服務(wù)器 > 基于Java的開源日志庫(kù)log4j調(diào)研筆記

基于Java的開源日志庫(kù)log4j調(diào)研筆記

來源:程序員人生   發(fā)布時(shí)間:2015-07-22 23:20:32 閱讀次數(shù):3852次

由于Hadoop生態(tài)鏈基本都是java開發(fā)的,所以在很多有關(guān)大數(shù)據(jù)處理的開源項(xiàng)目中,常常會(huì)看到log4j這個(gè)jar包。
本文旨在對(duì)它的用法做基本說明。

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

2. log4j的3要素
log4j存在3個(gè)重要概念:loggers, appenders和layouts,這3個(gè)要素使得引入log4j庫(kù)的開發(fā)者可以靈活控制打印行動(dòng),如日志等級(jí)、日志內(nèi)容、日志格式及打印目的地(如本地或遠(yuǎn)程打印),等等。
2.1 loggers
事實(shí)上,loggers是1些大小寫敏感的命名實(shí)體,這些實(shí)體的命名遵守以下的層級(jí)命名規(guī)則(細(xì)節(jié)可查看文檔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的層級(jí)結(jié)構(gòu)中,root logger處于最頂級(jí)。使用log4j庫(kù)時(shí),root logger必須被創(chuàng)建且只能通過類靜態(tài)方法Logger.getRootLogger來創(chuàng)建,而其它logger可以通過傳入logger name調(diào)用類靜態(tài)方法Logger.getLogger來實(shí)例化。 
可以為logger實(shí)例指定日志等級(jí)(如通過setLevel接口),目前支持這些經(jīng)常使用等級(jí):TRACE, DEBUG, INFO, WARN, ERROR, FATAL。不斟酌TRACE,其余等級(jí)的重要程度順次為:DEBUG < INFO < WARN < ERROR < FATAL
若某個(gè)logger實(shí)例沒有顯式指定等級(jí),則它會(huì)繼承距離它最近的、被顯式指定過日志等級(jí)的父logger實(shí)例的等級(jí)。
1旦為某個(gè)logger實(shí)例指定了等級(jí),則調(diào)用該實(shí)例打印日志時(shí),只有日志等級(jí)不小于指定等級(jí)的日志會(huì)被打印,低于指定等級(jí)的日志不會(huì)被打印出來。這個(gè)規(guī)則是log4j庫(kù)的核心規(guī)則,它保證了日志等級(jí)的靈活控制
2.2 appenders
appenders其實(shí)就是日志打印的目的地址(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個(gè)logger實(shí)例可以有多個(gè)appender(s),即同1條日志可以同時(shí)打印到多個(gè)目的地。
默許情況下,某logger實(shí)例的日志打印要求會(huì)打印到已為該logger實(shí)例添加的所有appenders上,另外,該日志打印要求還會(huì)沿著logger實(shí)例的層級(jí)繼承鏈向上傳播給其先人logger的所有appenders
例如,為root logger添加console類型的appender后,root logger的日志打印要求會(huì)輸出到console,這很容易理解。現(xiàn)在假定logger實(shí)例C繼承自root,且為實(shí)例C添加了file類型的appender,則調(diào)用實(shí)例C進(jìn)行日志打印時(shí),除file appender會(huì)輸出日志外,實(shí)例C的先人,即本例中的root logger也會(huì)收到該日志打印要求,由于root logger添加了console appender,所以,console appender也會(huì)輸出日志。這個(gè)默認(rèn)行動(dòng)可以通過將logger的additive字段設(shè)置為false來關(guān)閉。
關(guān)于appender additivity的更多說明及示例,可以參考Short introduction to log4j這篇文檔關(guān)于Appender部份的說明。
2.3 layouts
layouts可以指定日志的格式,支持的PatternLayout在文檔log4j - Class PatternLayout中有詳細(xì)說明,這里不贅述。

3. log4j的配置
log4j日志庫(kù)的配置可以在java程序中通過代碼指定,也能夠通過配置文件來指定并隨著java利用的啟動(dòng)被初始化。明顯后者更加靈活。
下面是1個(gè)典型的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個(gè)logger實(shí)例(即root logger),其最低日志等級(jí)是DEBUG,添加了2個(gè)appender(分別命名為stdout和R)。然后為兩個(gè)appender name分別指定了log4j真正支持的appender(分別為ConsoleAppender和RollingFileAppender),每一個(gè)appender都可以通過layout指定各自的日志格式。

4. log4j庫(kù)的初始化進(jìn)程
log4j不對(duì)它的使用處景做任何假定,因此,它沒有默許的appender,也即,appender必須由使用者顯式配置。援用了log4j庫(kù)的java進(jìn)程啟動(dòng)時(shí),JVM的classloader機(jī)制會(huì)對(duì)利用程序援用到的Logger類進(jìn)行加載,而該類的靜態(tài)初始化函數(shù)會(huì)嘗試自動(dòng)配置log4j。log4j庫(kù)默許的初始化進(jìn)程在文檔Short introduction to log4j的"Default Initialization Procedure"部份有詳細(xì)說明,感興趣的同學(xué)可以去查看。
備注:關(guān)于JVM加載class(如系統(tǒng)包或第3方擴(kuò)大包)的機(jī)制,可以通過下面幾篇文檔來理解:
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 ========================


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品亚洲欧美大片在线看 | 亚洲国产精品综合一区在线 | 午夜黄色网| 欧美日韩亚洲国产一区二区综合 | 成人夜视频 | 国产精品久久久久久一区二区 | 久久性生大片免费观看性 | 欧美精品黑人性xxxx | 亚洲人成网址在线观看 | 日韩国产欧美成人一区二区影院 | 亚洲精品国产福利一区二区三区 | 国产不卡毛片 | 亚洲国产日韩欧美在线a乱码 | 亚洲欧美久久婷婷爱综合一区天堂 | 欧美性猛交xxx嘿人猛交 | 日本做爰免费大片视频 | 亚洲 欧美精品 | 亚洲欧美日韩精品久久亚洲区 | 九操网| 国产69成人免费视频观看 | 国产小片| 综合久久一区二区三区 | 国产一区二区三区不卡在线观看 | 国产亚洲免费观看 | 免费看黄色的网址 | 国内视频自拍在线视频 | 亚洲精品图 | 日韩一区二区三区四区区区 | 最猛黑人xxxⅹ黑人猛交 | 欧美在线播放成人免费 | 国产二区三区 | 国产三区视频在线观看 | 毛片免费观看网址 | 图片区小说区激情区偷拍区 | 99国产精品农村一级毛片 | 免费www| 叼嘿免费视频 | 欧美x性 | 日韩在线一区高清在线 | 亚洲a视频 | 亚洲精品短视频 |