Log4J學(xué)習(xí)筆記

Log4J的三個組件:

Logger:日志記錄器铐拐,負(fù)責(zé)收集處理日志記錄(如何處理日志)

Appender:日志輸出目的地艳悔,負(fù)責(zé)日志的輸出(輸出到什么地方)

Layout:日志格式化任洞,負(fù)責(zé)對輸出的日志的格式化(以什么形式展現(xiàn))

一個logger可以對應(yīng)多個appender,一個appender只能對應(yīng)一個layout。

1、Logger:

logger可以有選擇的啟動和禁用日志的輸出搞动,我們經(jīng)常會在各種框架中看到如:

private static final Logger log=LoggerFactory.getLogger(xx.class);

講解:log就代表了一個Logger實例灰羽,他的name就是類“xx”的full quailied name(類的全限定名)驮履,這個log可以指定多個appender和layout。Logger的名字大小寫敏感谦趣,其命名有繼承機(jī)制:例如:name為org.apache.commons的logger會繼承name為org.apache的logger疲吸。

Log4J中有一個特殊的logger叫做“root”,他是所有l(wèi)ogger的根,也就意味著其他的logger都會直接或者間接地繼承自root前鹅。root logger可以用Logger.getRootLogger()方法獲取摘悴,但是不能通過Logger.getLogger("root")獲得。

java code:

Logger root = Logger.getRootLogger();

Logger log = Logger.getLogger("root");

System.out.println(log==root);//false 說明root無法通過name獲取


Logger log2 = Logger.getLogger("root");

System.out.println(log==log2);//true,說明一個name唯一對應(yīng)一個logger

2舰绘、Level:

level為logger服務(wù)蹂喻,用來定義日志的級別葱椭,他的值可以是:OFF(關(guān)閉)FATAL(致命的)ERROR(錯誤)WARN(警告)INFO(信息)DEBUG(調(diào)試)ALL(所有),輸出日志的策略由此Level決定口四,例如:如果logger的Level設(shè)置為INFO孵运,那么系統(tǒng)只輸出INFO以及以上(WARN、ERROR蔓彩、FATAL)信息治笨。如果當(dāng)前l(fā)ogger沒有設(shè)定Level,那么它在輸出日志時采用的策略是:它會使用它繼承的Logger的Level作為它自己的Level來處理。如果它的上級也沒有設(shè)置Level,那么就找上上級赤嚼,幾次類推旷赖,直到root為止,(root的Level是不能設(shè)為空的更卒,所以最終一定會找到一個Level)等孵。默認(rèn)root的Level是INFO,其他logger的Level默認(rèn)都是null,需要手動指定蹂空。

Level對應(yīng)的logger輸出級別對應(yīng)的方法有:

logger.debug(message);

logger.info(message);

logger.error(message);

logger.fatal(message);

3俯萌、Appender:

Appender可以控制日志的輸出的目的地,一個輸出源就叫一個Appender,appender的類別有:Console(控制臺)File(文件)JDBC上枕、JMS等等咐熙,logger可以通過方法logger.addAppender(appender)配置多個appender,對logger來說,每個有效的日志請求結(jié)果都將輸出到logger本身以及父logger的appender上辨萍。例如:

Logger com=Logger.getLogger("com");

Appender appender = new FileAppender(new SimpleLayout(),"hello.log");

com.addAppender(appender);

Logger iteye = Logger.getLogger("com.iteye");

iteye.addAppender(new ConsoleAppender(new SimpleLayout(),"System.out"));//target:sys.out(default)或sys.err

iteye.info("hello world");

上例中糖声,“iteye”是繼承"com"logger的,“com”定義的appender是FileAppender,而“iteye”定義的appender是ConsoleAppender,這里我并沒有設(shè)置他們的Level,那么自動使用root默認(rèn)的INFO作為日志的等級分瘦,因此此處iteye.info("hello world")會被輸出到指定的appender上蘸泻。但是最終日志信息會顯示在控制臺,而且也會輸出到文件hello.log中去嘲玫。不過這里可以通過設(shè)置logger“iteye”的additivity(附加標(biāo)記)設(shè)為false==>>iteye.setAdditivity(false);這樣日志信息”hello world“就不會寫入到hello.log中去了悦施。

常用的集中appender有:

org.apache.log4j.ConsoleAppender(控制臺)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件)

org.apache.log4j.RollingFileAppender((文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件))

org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

4、Layout:

使用指定的Layout來展示(格式化)日志去团,常見的Layout有:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以靈活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串)

org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間抡诞、線程值戳、類別等等信息)捌锭,等

5、配置:

配置了以上幾個組件后取视,我們就可以了解一下log4j的配置.properties了鬼雀。

Java code:

#配置根Logger

log4j.rootLogger = [level],appenderName1,appenderName2,...

#例子:

log4j.rootLogger =? DEBUG,stdout,file

java code:

#配置日志信息輸出目的地(Appender)

log4j.appender.appenderName =? fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1=value1

...

log4j.appender.appenderName.optionN=valueN

#例子

###輸出到控制臺###

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

log4j.appender.stdout .Target = System.out #默認(rèn)就是System.out,另外一個值是System.error

log4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE}? %5p %c{1}:%L - %m%n

###輸出到文件###

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender

log4j.appender.file.File = logs/log.log

log4j.appender.file.Append?= true #默認(rèn)是true,系統(tǒng)啟動時追加至文件中顷窒,否則會覆蓋原有內(nèi)容

log4j.appender.file.Threshold = INFO ## 輸出IFNO級別以上的日志,這里的意思是rootLooger設(shè)置為DEBUG時,只輸出INFO以上(INFO鞋吉、WARN鸦做、ERROR、FATAL)的信息到文件中去谓着,而DEBUG信息就不會輸出 了

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] % m%n

java code

#配置日志信息的格式(Layout)

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

log4j.appender.appenderName.layout.option1 = value1

...

log4j.appender.appenderName.layout.optionN =? valueN

#例子

log4j.appender.file.layout =? org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} ?[%t:%r] - [%p] %m%n

ConversionPattern參數(shù)的格式含義

格式名 含義

%c??? 輸出日志信息所屬的類的全名

%d??? 輸出日志時間點(diǎn)的日期或時間泼诱,默認(rèn)格式為ISO8601,也可以在其后指定格式赊锚,比如:%d{yyy-MM-dd HH:mm:ss},輸出類似:2002-10-18 22:10:28

%f????? 輸出日志信息所屬的類的類名

%l??????輸出日志事件的發(fā)生位置治筒,即輸出日志信息的語句處于它所在的類的第幾行

%m??? 輸出代碼中指定的信息,如log(message)中的message

%n???? 輸出一個回車換行符舷蒲,Windows平臺為“rn”,Unix平臺為"n"

%p???? 輸出優(yōu)先級矢炼,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調(diào)用debug()輸出的阿纤。則國DEBUG,依此類推

%r???? 輸出自應(yīng)用啟動到輸出該日志信息所耗費(fèi)的毫秒數(shù)

%t???? 輸出產(chǎn)生該日志事件的線程名



最后如果你看到此類錯誤應(yīng)該有不再感到疑惑了吧:

public static org.slf4j.Logger log = LoggerFactory.getLogger(Test.class);

?log.error("erro");


log4j:WARN No appenders could be found for logger (Test).

?log4j:WARN Please initialize the log4j system properly.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夷陋,隨后出現(xiàn)的幾起案子欠拾,更是在濱河造成了極大的恐慌,老刑警劉巖骗绕,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藐窄,死亡現(xiàn)場離奇詭異,居然都是意外死亡酬土,警方通過查閱死者的電腦和手機(jī)荆忍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撤缴,“玉大人刹枉,你說我怎么就攤上這事∏唬” “怎么了微宝?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虎眨。 經(jīng)常有香客問我蟋软,道長,這世上最難降的妖魔是什么嗽桩? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任岳守,我火速辦了婚禮,結(jié)果婚禮上碌冶,老公的妹妹穿的比我還像新娘湿痢。我一直安慰自己,他們只是感情好扑庞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布蒙袍。 她就那樣靜靜地躺著俊卤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪害幅。 梳的紋絲不亂的頭發(fā)上消恍,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音以现,去河邊找鬼狠怨。 笑死,一個胖子當(dāng)著我的面吹牛邑遏,可吹牛的內(nèi)容都是我干的佣赖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼记盒,長吁一口氣:“原來是場噩夢啊……” “哼憎蛤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起纪吮,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤俩檬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碾盟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棚辽,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年冰肴,在試婚紗的時候發(fā)現(xiàn)自己被綠了屈藐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡熙尉,死狀恐怖联逻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情检痰,我是刑警寧澤遣妥,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站攀细,受9級特大地震影響箫踩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谭贪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一境钟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧俭识,春花似錦慨削、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磁椒。三九已至,卻和暖如春玫芦,著一層夾襖步出監(jiān)牢的瞬間浆熔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工桥帆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留医增,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓老虫,卻偏偏與公主長得像叶骨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子祈匙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況忽刽,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計分析...
    時待吾閱讀 5,055評論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計分析...
    時待吾閱讀 4,991評論 0 6
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一夺欲、L...
    enshunyan閱讀 3,294評論 0 0
  • 一跪帝、Log4j簡介 Log4j有三個主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,913評論 2 8
  • Log4J的配置文件(Configuration File)就是用來設(shè)置記錄器的級別洁闰、存放器和布局的,它可接key...
    Alex_1799閱讀 45,183評論 0 11