JAVA接口自動(dòng)化(十一)log4j

一赎婚、log4j介紹

1 . 為什么要使用日志

答 : 開(kāi)發(fā)階段發(fā)現(xiàn)程序的問(wèn)題 , 排除錯(cuò)誤 , 產(chǎn)品階段 , 可以記錄系統(tǒng)運(yùn)行的一些狀態(tài)信息 , 程序運(yùn)行的狀態(tài) ;

2 . System . out . println的局限性

答 : (1)不能在運(yùn)行時(shí)打開(kāi)或者關(guān)閉 ;

? ? ? ?(2)不能選擇包或者類(lèi) , 在運(yùn)行的時(shí)候打開(kāi)或者關(guān)閉 ;

? ? ? ?(3)輸出的信息沒(méi)有分級(jí) ;

? ? ? ?(4)只能輸出文本信息 ;

? ? ? ?(5)不能改變輸出位置 ;

3 . 什么是log4j ?

答 : log4j是目前最流行的java開(kāi)源日志處理框架 , 是Apache的子項(xiàng)目 ;

4 . 關(guān)于配置文件

答 : log4j中的xml配置文件要優(yōu)先于properties文件 ;

5 . log4j的特性

答 : (1)線(xiàn)程安全 ;

? ? ? ?(2)log4j是經(jīng)過(guò)優(yōu)化速度的 ;

? ? ? ?(3)log4j是基于一個(gè)名為記錄器的層次結(jié)構(gòu) ;

? ? ? ?(4)log4j的支持每個(gè)記錄器多輸出追加器(appender) ;

? ? ? ?(5) log4j支持國(guó)際化 ;

? ? ? ?(6)log4j并不限于一組預(yù)定義的設(shè)備 ;

? ? ? (7)日志行為可以使用配置文件在運(yùn)行時(shí)設(shè)置 ;

? ? ? (8)log4j設(shè)計(jì)從一開(kāi)始就是處理java異常 ;

? ? ? (9)log4j有多個(gè)級(jí)別 , 通過(guò)控制這些級(jí)別可以實(shí)現(xiàn)將某些不想輸出的信息過(guò)濾掉 ;

? ? ?(10) 日志輸出的格式可以通過(guò)拓展Layout類(lèi)容易的改變 ;

? ? ?(11)日志輸出的目標(biāo) , 以及在寫(xiě)入策略可通過(guò)實(shí)現(xiàn)Appender程序接口改變 ;

? ? ?(12) log4j會(huì)故障停止 , 然而 , 盡管它肯定努力確保傳遞 , log4j不保證每個(gè)日志語(yǔ)句將被傳遞到目的地 ;


6 . log4j的主要組成部分

答 : (1)loggers : 負(fù)責(zé)捕獲記錄信息 ;

? ? ? ?(2)appenders : 負(fù)責(zé)發(fā)布日志信息 , 以不同的首選目的地 ;

? ? ? ?(3)layouts : 負(fù)責(zé)格式化不同風(fēng)格的日志信息 ;


7 . log4j級(jí)別(從小到大)

答 : ALL : 各級(jí)包括自定義級(jí)別 ;

? TRACE : 指定細(xì)粒度比DEBUG更低的信息事件 ;

? DEBUG : 調(diào)試級(jí)別 ;

? INFO : 表明消息在粗粒度級(jí)別上突出強(qiáng)調(diào)應(yīng)用程序是非常有幫助的 , 也就是輸出一些提示信息 ;

? WARN : 輸出潛在的有可能出錯(cuò)的情形 , 也就是輸出警告信息 ;

? ERROR : 指出發(fā)生的不影響系統(tǒng)繼續(xù)運(yùn)行的錯(cuò)誤信息 ;

? FATAL : 指出嚴(yán)重的錯(cuò)誤 , 這些錯(cuò)誤將會(huì)導(dǎo)致系統(tǒng)終止運(yùn)行 ;

? OFF : 為最高級(jí)別 , 用于關(guān)閉所有日志信息的輸出 ;

核心規(guī)則 : log4j只會(huì)輸出級(jí)別大于或者等于指定級(jí)別的信息 ;

8 . properties文件配置

答 : 1 . 配置根Logger , 語(yǔ)法為 :

? ? ? log4j.rootLogger = [ level ] , appenderName , appenderName ……

? 注意 : (1)第七條中雖然羅列了很多級(jí)別 , 但log4j推薦只使用四個(gè)級(jí)別 , 優(yōu)先級(jí)從高到低分別是ERROR , WARN , INFO , DEBUG ;

? ? ? ? ? ? (2)appenderName指的是日志輸出的地址 , 可以同時(shí)指定n個(gè) ;

? 2 . 配置日志輸出的目的地Appender以及每個(gè)輸出文件的各項(xiàng)屬性 , 語(yǔ)法為 :

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

? ? ? ? log4j.appender.appenderName.option1 = value1

? 注意 : log4j中提供的appender有以下幾種 :

? ? ? ? ? ? 1 . org.apache.log4j.ConsoleAppender(控制臺(tái)) ;

? ? ? ? ? ? 2 . org.apache.log4j.FileAppender(文件) ;

? ? ? ? ? ? 3 . org.apache.log4j.DailyRollingFileAppender(按照一定的頻度滾動(dòng)產(chǎn)生日志記錄文件 , 默認(rèn)每天產(chǎn)生一個(gè)文件) ;

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

? ? ? ? ? ? 5 . org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到指定的位置) ;

? 3 . 配置日志信息的格式或者布局layout以及布局的各項(xiàng)屬性 , 語(yǔ)法為 :

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

? ? ? ? log4j.appender.appenderName.layout.option1 = value

? 注意 : log4j中提供的layout有以下幾種 :

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

? ? ? ? ? 2 . org.apache.log4j.PatternLayout(可以靈活的指定布局模式 , 需要配置layout.ConversionPattern屬性) ;

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

? ? ? ? ? 4 . org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(shí)間 , 線(xiàn)程 , 類(lèi)別等等信息) ;


9 . 控制臺(tái)選項(xiàng)

答 : 1 . log4j.appender.appenderName.Threshold = error

? ? ? 用法 : rootLogger里配置debug , 然后某個(gè)文件專(zhuān)門(mén)存儲(chǔ)error以及更高級(jí)別的錯(cuò)誤信息 , 那么就在這個(gè)配置這個(gè)文件的時(shí)候指定Threshold屬性為error ;

? 2 . log4j.appender.appenderName.ImmediateFlush=true

? ? ? 用法 : 默認(rèn)值是true , 意味著所有的消息都會(huì)被立即輸出 , false則是不輸出 ;

? 3 . log4j.appender.appenderName.target=System.out

? ? ? 用法 : 默認(rèn)值為System.out , 輸出到控制臺(tái) , 還可以取值System.err , 當(dāng)做錯(cuò)誤信息輸出 , 輸出的信息全部為紅色 ;

? 4 . log4j.appender.appenderName.File=../../../../logs/log.appenderName.txt

? ? ? 用法 : 指定日志輸出到指定位置 , 用的是相對(duì)于配置文件根目錄的相對(duì)路徑 ;

? 5 . log4j.appender.appenderName.File.Append=true

? ? ? 用法 : 默認(rèn)值是true , 即將消息追加到指定文件中 , 如果取值為false , 則會(huì)覆蓋之前的日志內(nèi)容 ;

? 6 . log4j.appender.appenderName.MaxFileSize=20MB

? ? ? 用法 : 后綴可以是KB , MB , GB , 當(dāng)日志文件的大小到達(dá)指定大小后 , 將會(huì)自動(dòng)滾動(dòng) , 即將原來(lái)的內(nèi)容移到fileName.1文件中 , 用記事本打開(kāi)該文件即可看到原來(lái)的內(nèi)容 , 改屬性只能在 appender=org.apache.log4j.RollingFileAppender 時(shí)使用 ;

? 7 . log4j.appender.appenderName.MaxBackupIndex=10

? ? ? 用法 : 指定可以產(chǎn)生滾動(dòng)文件的最大數(shù)量 , 與RollingFileAppender和MaxFileSize屬性一起使用 , 當(dāng)MaxBackupIndex=n的時(shí)候 , 最大日志存在數(shù)量為n+1 , 即log.txt , log.txt.1 , ... , log.txt.n , 當(dāng)在服務(wù)器上運(yùn)行的時(shí)候 , 如果對(duì)日志數(shù)量沒(méi)有限制 , 那么隨之時(shí)間的推移 , 日志文件會(huì)越來(lái)越多 , 占用的內(nèi)存也將越來(lái)越多 , 直到占滿(mǎn)整個(gè)盤(pán) ;

? 8 . log4j.appender.appenderName.DatePattern='.'yyyy-MM-dd

? ? ? 用法 : 該屬性在 log4j.appender.appenderName=org.apache.log4j.DailyRollingFileAppender 時(shí)使用 , DailyRollingFileAppender默認(rèn)的頻度是每天產(chǎn)生一個(gè)日志記錄文件 , 可以在DatePattern屬性值中指定其他的頻度 , 常用的幾個(gè)頻度如下 :

? ? ? ? 1 . '.'yyyy-MM : 每月產(chǎn)生一個(gè)日志記錄文件 ;

? ? ? ? 2 . '.'yyyy-ww : 每周產(chǎn)生一個(gè)日志記錄文件 ;

? ? ? ? 3 . '.'yyyy-MM-dd : 每天產(chǎn)生一個(gè)日志記錄文件 ;

? ? ? ? 4 . '.'yyyy-MM-dd-a : 每半天產(chǎn)生一個(gè)日志記錄文件 ;

? ? ? ? 5 . '.'yyyy-MM-dd-HH : 每小時(shí)產(chǎn)生一個(gè)日志記錄文件 ;

? ? ? ? 6 . '.'yyyy-MM-dd-HH-mm : 每分鐘產(chǎn)生一個(gè)日志記錄文件 ;

? ? ? ? 注意 : 該屬性指定值之后 , 將會(huì)按照指定的頻度來(lái)生成日志記錄文件 , 假設(shè)指定生成一個(gè)名為 log.txt 的文件 , 頻度指定為每分鐘產(chǎn)生一個(gè)日志記錄文件 , 當(dāng)達(dá)到指定頻度后 , 會(huì)將log.txt文件中記錄的之前的日志記錄 , 重新寫(xiě)入一個(gè)名為 log.txt.yyyy-MM-dd-HH-mm的文件中 , 而此時(shí) log.txt 文件中存放的是新生成的日志信息 , 該過(guò)程循環(huán)往復(fù) ;

10 . ConversionPattern參數(shù)

答 : 假設(shè)當(dāng)前java文件名為T(mén)est , 所在包名為log4j :

? 1 . %c : 顯示當(dāng)前l(fā)ogger空間全稱(chēng) , 例如 : log4j.Test ;

? ? ? ? %c{層數(shù)} : 最內(nèi)層的java文件為第一層 , 例如 : %c{1} , 顯示為T(mén)est , 當(dāng)層數(shù)大于實(shí)際存在的最大層數(shù)時(shí) , 顯示最大實(shí)際存在層數(shù) ;

? 2 . %10c : 若名字空間長(zhǎng)度小于10 , 則在左邊將欠缺的長(zhǎng)度用空格補(bǔ)齊 , 該種情況為默認(rèn)的右對(duì)齊方式 ;

? ? ? ? %-10c : 若名字空間長(zhǎng)度小于10 , 則在右邊將欠缺的長(zhǎng)度用空格補(bǔ)齊 , 該種情況為默認(rèn)的左對(duì)齊方式 ;

? 3 . %.3c : 從空間名最右邊開(kāi)始顯示指定的長(zhǎng)度 , 超出該長(zhǎng)度的部分將被截取 ;

? 4 . %10.15c : 若空間名長(zhǎng)度小于10 , 則左邊將欠缺的長(zhǎng)度用空格補(bǔ)齊 , 若長(zhǎng)度超過(guò)15 , 則將多余部分截取 ;

? 7 . %-10.15c : 若空間名長(zhǎng)度小于10 , 則右邊將欠缺的長(zhǎng)度用空格補(bǔ)齊 , 若長(zhǎng)度超過(guò)15 , 則將多余部分截取 ;

? 8 . %d : 顯示日志記錄時(shí)間 , 默認(rèn)時(shí)間格式為ISO8601定義的日期格式 ;

? ? ? ? %d{yyyy-MM-dd HH:mm:ss} : 按照指定的時(shí)間格式顯示日期 ;

? 9 . %d{ABSOLUTE} : 22:15:30,076 ;

? ? ? ? %d{DATE} : 12 Oct 2018 22:15:30,076 ;

? ? ? ? %d{ISO8601} : 2018-07-20 22:23:30,076 ;

? 10 . %F : 顯示調(diào)用logger的源文件名 , 例如 : Test.java ;

? 11 . %l : 輸出日志事件的發(fā)生位置 , 包括類(lèi)目名 , 發(fā)生的線(xiàn)程 , 以及在代碼中的行數(shù) , 例如 : log4j.log4jTest.main(log4jTest.java:40) ;

? 12 : %m : 顯示輸出消息 ;

? 13 . %M : 顯示調(diào)用logger的方法名 ;

? 14 . %n : 換行符 ;

? 15 : %p : 顯示該條目的優(yōu)先級(jí) ;

? 16 . %r : 顯示從程序啟動(dòng)時(shí)到記錄該條日志時(shí)已經(jīng)經(jīng)過(guò)的時(shí)間 , 單位毫秒 ;

? 17 . %t : 顯示產(chǎn)生該日志條目的線(xiàn)程名 ;

? 18 . %x : 按NDC(Nested Diagnostic Context , 線(xiàn)程堆棧) : 順序輸出日志 ;

? ? ? ? ? %X : 按MDC(Mapped Diagnostic Context , 線(xiàn)程映射表)輸出日志 , 通常用于多個(gè)客戶(hù)端連接同一個(gè)服務(wù)器 , 方便服務(wù)器區(qū)分是哪個(gè)客戶(hù)端訪(fǎng)問(wèn)留下來(lái)的日志 ;

? 19 . %% : 顯示一個(gè)百分號(hào) ;

11 . LevelRangeFilter(分級(jí)過(guò)濾器)

答 : 如果想要實(shí)現(xiàn)不同級(jí)別的日志分別輸出到不同的位置 , 可以在properties配置文件中加入如下語(yǔ)句進(jìn)行限制 , 例如 :

? log4j.appender.appenderName.Threshold=debug

? log4j.appender.appenderName.filter.filterName=org.apache.log4j.varia.LevelRangeFilter

? log4j.appender.appenderName.filter.filterName.LevelMin=debug

? log4j.appender.appenderName.filter.filterName.LevelMax=debug

? 解釋 : 將最低輸出級(jí)別LevelMin和最高輸出級(jí)別LevelMax都設(shè)置為debug , 那么就只能輸出debug級(jí)別的日志信息了 ;

(2)log4j使用

將log4j-1.2.17.jar進(jìn)行buildpath桨踪,原來(lái)使用過(guò)maven配置依賴(lài)欺缘,但是在使用時(shí)候報(bào)錯(cuò)所以就直接導(dǎo)入jar包。

log4j.properties文件

#設(shè)置log4j日志輸出路徑

log = D:/logs

#設(shè)置輸出日志級(jí)別和輸入模式

log4j.rootLogger=debug,appender1,FILE

#設(shè)置控制臺(tái)輸出信息

log4j.appender.appender1=org.apache.log4j.ConsoleAppender

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

log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %m%n

#設(shè)置日志輸出路徑

log4j.appender.FILE=org.apache.log4j.RollingFileAppender

log4j.appender.FILE.MaxFileSize=10MB

log4j.appender.FILE.MaxBackupIndex=3

log4j.appender.FILE.File=${log}/testLog.log

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

log4j.appender.FILE.layout.conversionPattern=%m%n

測(cè)試demo 類(lèi):

package com.suning.SuningInterfaceAutotest.log4j;

import org.apache.log4j.Logger;

public class demo {

private static Logger logger = Logger.getLogger(demo.class);

public static void main(String[] args) {

logger.debug("This is debug message.");

logger.info("This is info message.");

logger.error("This is error message.");

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末木缝,一起剝皮案震驚了整個(gè)濱河市涣旨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矫夷,老刑警劉巖葛闷,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異双藕,居然都是意外死亡淑趾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)忧陪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扣泊,“玉大人,你說(shuō)我怎么就攤上這事嘶摊⊙有罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵更卒,是天一觀的道長(zhǎng)等孵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)蹂空,這世上最難降的妖魔是什么俯萌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任果录,我火速辦了婚禮,結(jié)果婚禮上咐熙,老公的妹妹穿的比我還像新娘弱恒。我一直安慰自己,他們只是感情好棋恼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布返弹。 她就那樣靜靜地躺著,像睡著了一般爪飘。 火紅的嫁衣襯著肌膚如雪义起。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天师崎,我揣著相機(jī)與錄音默终,去河邊找鬼。 笑死犁罩,一個(gè)胖子當(dāng)著我的面吹牛齐蔽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播床估,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼含滴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丐巫?” 一聲冷哼從身側(cè)響起谈况,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎递胧,沒(méi)想到半個(gè)月后鸦做,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谓着,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年泼诱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赊锚。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡治筒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舷蒲,到底是詐尸還是另有隱情耸袜,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布牲平,位于F島的核電站堤框,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜈抓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一启绰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沟使,春花似錦委可、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至燕少,卻和暖如春卡者,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背客们。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工虎眨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镶摘。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岳守,于是被迫代替她去往敵國(guó)和親凄敢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 在應(yīng)用程序中添加日志記錄總的來(lái)說(shuō)基于三個(gè)目的:監(jiān)視代碼中變量的變化情況湿痢,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 4,988評(píng)論 0 6
  • 在應(yīng)用程序中添加日志記錄總的來(lái)說(shuō)基于三個(gè)目的:監(jiān)視代碼中變量的變化情況涝缝,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,052評(píng)論 1 13
  • 一、Log4j簡(jiǎn)介 Log4j有三個(gè)主要的組件:Loggers(記錄器)譬重,Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,910評(píng)論 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一拒逮、L...
    enshunyan閱讀 3,292評(píng)論 0 0
  • 愛(ài)珠寶滩援,不僅僅是愛(ài)它的美麗,愛(ài)它的價(jià)值塔嬉,更是愛(ài)它背后那份獨(dú)一無(wú)二的文化與尊貴玩徊!愛(ài)珠寶的女人都愛(ài)自己,因?yàn)閻?ài)自己谨究,才...
    岳笑崢vip閱讀 236評(píng)論 0 0