log4j詳細(xì)介紹

log4j是什么

* Apache的開源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件(框架),提供方便的日志記錄滋将。

日志的作用

  • 第一用途:編寫程序的時(shí)候邻悬,進(jìn)行調(diào)試。
    • 類似于:大家使用System.out.print()來調(diào)試代碼
  • 第二用途:項(xiàng)目上線(商業(yè)運(yùn)行)随闽,查看系統(tǒng)的運(yùn)行狀態(tài)
  • 日志是用來記錄信息的父丰,比如服務(wù)器的日志主要是用來記錄一些訪問信息,以便出現(xiàn)狀況時(shí)掘宪,可以根據(jù)日志來判斷原因蛾扇。

聊聊System.out.print()的缺陷

  • 過于簡單,只能輸出在控制臺(tái)
  • 不能寫入文件系統(tǒng)
  • 日志不能分級(jí)別魏滚,沒有開關(guān)

log4j的使用

使用1:我們自己用

  1. 導(dǎo)入jar包
  2. 編寫log4j的配置文件
  3. 自己代碼中的實(shí)際使用

示例代碼:

import org.apache.log4j.Logger;
import org.junit.Test;

public class Junit4Test {
    static Logger logger = Logger.getLogger(Junit4Test.class);

    @Test
    public void test(){
        logger.error("junit4的log4j...");
    }
}

使用2:導(dǎo)入的框架使用

解讀log4j.properties配置文件

### 輸出源1:名字叫stdout, 其輸出到控制臺(tái) ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### 輸出源2:名字叫file,其輸出到文件 ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### 根記錄器(控制器):級(jí)別是:info, 開啟輸出源:stdout ###
log4j.rootLogger=info, stdout

rootLogger(記錄器镀首,控制器)

  1. 配置根rootLogger,其語法為:log4j.rootLogger = [ level ] , appenderName, appenderName, …

  2. level:是日志記錄的優(yōu)先級(jí)鼠次,分為(高)OFF更哄、FATAL、ERROR腥寇、WARN成翩、INFO、DEBUG赦役、ALL(低)或者自定義的級(jí)別麻敌。

    • Log4j建議只使用四個(gè)級(jí)別,優(yōu) 先級(jí)從高到低分別是ERROR掂摔、WARN术羔、INFO赢赊、DEBUG。通過在這里定義的級(jí)別级历,您可以控制到應(yīng)用程序中相應(yīng)級(jí)別的日志信息的開關(guān)释移。
    • 定義了ERROR級(jí)別:FATAL,ERROR級(jí)別日志可以輸出,WARM, INFO, DEBUG級(jí)別日志鱼喉,不輸出秀鞭。
    • 定義成debug:
  1. appenderName就是指B日志信息輸出到哪個(gè)地方趋观。您可以同時(shí)指定多個(gè)輸出目的地扛禽。

Appender(輸出源)

  1. 配置日志信息輸出目的地Appender,其語法為:

     log4j.appender.appenderName = fully.qualified.name.of.appender.class  
     log4j.appender.appenderName.option1 = value1  
     …  
     log4j.appender.appenderName.option = valueN
    
  2. log4j提供的appender有以下幾種:

     org.apache.log4j.ConsoleAppender(控制臺(tái))皱坛,  
     org.apache.log4j.FileAppender(文件)编曼,  
     org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個(gè)日志文件),  
     org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件)剩辟,  
     org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)
    
  3. 配置日志信息的格式(布局)掐场,其語法為:

     log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class  
     log4j.appender.appenderName.layout.option1 = value1  
     …  
     log4j.appender.appenderName.layout.option = valueN
    
  4. 其中,Log4j提供的layout有以下幾種:

     org.apache.log4j.HTMLLayout(以HTML表格形式布局)贩猎,  
     org.apache.log4j.PatternLayout(可以靈活地指定布局模式)熊户,  
     org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串),  
     org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間吭服、線程嚷堡、類別等等信息)
    
  5. Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:

     %m 輸出代碼中指定的消息
     %p 輸出優(yōu)先級(jí)艇棕,即DEBUG蝌戒,INFO,WARN沼琉,ERROR北苟,F(xiàn)ATAL  
     %r 輸出自應(yīng)用啟動(dòng)到輸出該log信息耗費(fèi)的毫秒數(shù)  
     %c 輸出所屬的類目,通常就是所在類的全名  
     %t 輸出產(chǎn)生該日志事件的線程名  
     %n 輸出一個(gè)回車換行符打瘪,Windows平臺(tái)為“rn”友鼻,Unix平臺(tái)為“n”  
     %d 輸出日志時(shí)間點(diǎn)的日期或時(shí)間,默認(rèn)格式為ISO8601闺骚,也可以在其后指定格式彩扔,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28葛碧,921  
     %l 輸出日志事件的發(fā)生位置借杰,包括類目名、發(fā)生的線程进泼,以及在代碼中的行數(shù)蔗衡。舉例:Testlog4.main(TestLog4.java:10)
    

slf4j簡介

  • 定義了一個(gè)接口
  • 需要一個(gè)真正做事的纤虽,可以是log4j,或者其他绞惦。

log4j日志的缺陷

  • 缺陷:如果你使用別人的框架逼纸,你不會(huì)喜歡別人指定的具體日志組件。

slf4j的介紹

  1. slf4j不同于其他日志類庫济蝉,與其它有很大的不同杰刽。slf4j(Simple logging Facade for Java)不是一個(gè)真正的日志實(shí)現(xiàn),而是一個(gè)抽象層( abstraction layer)王滤,它允許你在后臺(tái)使用任意一個(gè)日志類庫贺嫂。
  • 體會(huì)一句話:如果你使用別人的框架,你不喜歡別人了指定的具體日志組件(框架)雁乡。
  1. slf4j所提供的核心API是一些接口以及一個(gè)LoggerFactory的工廠類第喳。

  2. slf4j提供了統(tǒng)一的記錄日志的接口,只要按照其提供的方法記錄即可踱稍。不需要在代碼中或配置文件中指定你打算使用那個(gè)具體的日志系統(tǒng)曲饱。

  3. 最終日志的格式、記錄級(jí)別珠月、輸出方式等通過具體日志系統(tǒng)的配置來實(shí)現(xiàn)扩淀,可以靈活切換日志系統(tǒng)。

slf4j使用舉例

  1. 導(dǎo)入slf4j的jar
    • slf4j-api-1.6.1.jar
  1. 編寫代碼

     import org.slf4j.Logger;
     import org.slf4j.LoggerFactory;
     
     publicclass HelloSlf4j {
          static  Logger logger = LoggerFactory.getLogger(HelloSlf4j.class);
         publicstaticvoid main(String[] args) {
             logger.debug("This is debug message");
             logger.info("This is info message");
             logger.warn("This is warn message");
             logger.error("This is error message");
         }
     }
    
  2. 真正使用

第一步:導(dǎo)入jar

  • 使用slf4j進(jìn)行日志輸出時(shí)啤挎,slf4j-api-1.6.1.jar這個(gè)jar包驻谆,是不夠的。因?yàn)榍纸@里面只有一個(gè)抽象層旺韭,沒有真正的日志實(shí)現(xiàn)。
  • 例如:底層采用log4j這個(gè)真正做事的日志框架掏觉,還需要導(dǎo)入:
    • log4j-1.2.16.jar(log4j自身的jar包)
    • slf4j-log4j12-1.7.2.jar(log4j與slf4j的適配層)

第二步:編寫配置文件

  • 直接使用log4j的配置文件即可
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末区端,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子澳腹,更是在濱河造成了極大的恐慌织盼,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酱塔,死亡現(xiàn)場離奇詭異沥邻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)羊娃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門唐全,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事邮利∶直ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵延届,是天一觀的道長剪勿。 經(jīng)常有香客問我,道長方庭,這世上最難降的妖魔是什么厕吉? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮械念,結(jié)果婚禮上头朱,老公的妹妹穿的比我還像新娘。我一直安慰自己订讼,他們只是感情好髓窜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布扇苞。 她就那樣靜靜地躺著脯倚,像睡著了一般趋惨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天人柿,我揣著相機(jī)與錄音,去河邊找鬼碌更。 笑死瓶籽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的崖媚。 我是一名探鬼主播亦歉,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼畅哑!你這毒婦竟也來了肴楷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤荠呐,失蹤者是張志新(化名)和其女友劉穎赛蔫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泥张,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呵恢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了媚创。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渗钉。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钞钙,靈堂內(nèi)的尸體忽然破棺而出鳄橘,到底是詐尸還是另有隱情粤剧,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布挥唠,位于F島的核電站抵恋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宝磨。R本人自食惡果不足惜弧关,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唤锉。 院中可真熱鬧世囊,春花似錦、人聲如沸窿祥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晒衩。三九已至嗤瞎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間听系,已是汗流浹背贝奇。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靠胜,地道東北人掉瞳。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像浪漠,于是被迫代替她去往敵國和親陕习。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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