Log4J

Log4J的三個組件:html

Logger:日誌記錄器java

Appender:日誌輸出apache

Layout:日誌格式化app

一個logger能夠對應多個appender,一個appender只能對應一個layout。框架

一、Logger:佈局

logger能夠有選擇的啓動和禁用日誌的輸出,咱們常常會在各類框架中看到如:spa

 

Java代碼  收藏代碼線程

  1. private static final Logger log = LoggerFactory.getLogger(XX.class);  debug

 

 log就表明了一個Logger實例,他的name就是類「XX」的full quailied name(類的全限定名),按照上圖所述,這個log就能夠指定多個appender和layout。Logger的名字大小寫敏感,其命名有繼承機制:例如:name爲org.apache.commons的logger會繼承name爲org.apache的logger。調試

 

Log4J中有一個特殊的logger叫作「root」,他是全部logger的根,也就意味着其餘全部的logger都會直接或者間接地繼承自root。root logger能夠用Logger.getRootLogger()方法獲取,可是不能經過Logger.getLogger("root")得到。

二、Level

level爲logger服務,用來定義日誌的級別,他的值能夠是: OFF(關閉)FATAL(致命的) ERROR(錯誤)WARN(警告) INFO(信息)DEBUG (調試) ALL(全部),輸出日誌的策略由此Level決定,例如:若是logger的Level設置爲INFO,那麼系統只輸出INFO以及以上(WARN、ERROR、FATAL)信息。若是當前logger沒有設定Level,那麼它在輸出日誌時採用的策略是:它會使用它繼承的Logger的Level做爲它本身的Level來處理。若是它的上級也沒有設置Level,那麼就找上上級,幾回類推,直到root爲止,(root的Level是不能設爲空的,因此最終必定會找到一個Level)。默認root的Level是INFO,其餘logger的Level默認都是null,須要手動指定。

logger.debug(message);  
logger.info(message);
logger.warn(message);
logger.error(message);
logger.fatal(message);

三、Appender:

Appender能夠控制日誌的輸出的目的地,一個輸出源就叫一個Appender,appender的類別有:Console(控制檯)File(文件)JDBC、JMS,logger能夠經過方法logger.addAppender(appender); 配置多個appender,對logger來講,每一個有效的日誌請求結果都將輸出到logger自己以及父logger的appender上。例如:

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

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

example.addAppender( appender);

Logger extest = Logger.getLogger("example.test");

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

extest.info("hello world");

上例中,「extest」是繼承「example」logger的,"example"定義的appender是FileAppender,而"example"定義的appender是ConsoleAppender,這裏我並無設置他們的Level,那麼自動使用root默認的INFO做爲日誌的的等級,所以此處extest.info(「hello world")會被輸出到指定的appender上。注意:這裏"extest" 並無設置FileAppender做爲本身的appender,可是最終日誌信息會顯示在控制檯,並且也會輸出到文件example.log中去。不過這裏能夠經過設置logger 」extest"的additivity(附加標記)設爲false ==》extest.setAdditivity(false);這樣日誌信息「hello world」就不會寫入到hello.log中去了。

經常使用的集中appender有:

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

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件)

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

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

四、Layout:

使用指定的Layout來展現(格式化)日誌,常見的Layout有:

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

org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式)

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

org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息),更多

 

五、配置:

理解了以上幾個組建後,咱們就能夠了解一下log4j的配置log4j.properties了。

 #配置根Logger
log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …
#例子:
log4j.rootLogger = DEBUG ,  stdout ,file
#配置日誌信息輸出目的地(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   #默認就是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   #默認就是true,系統啓動時追加至文件中,不然會覆蓋原有內容
log4j.appender.file.Threshold = INFO ## 輸出IFNO級別以上的日誌,這裏的意思是rootLogger設置爲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
#配置日誌信息的格式(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參數的格式含義 

格式名   含義 

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

%d         輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy-MM-dd HH:mm:ss },輸出相似:2002-10-18- 22:10:28 

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

%l          輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行 

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

%n         輸出一個回車換行符,Windows平臺爲「rn」,Unix平臺爲「n」 

%p         輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。若是是調用debug()輸出的,則爲DEBUG,依此類推 

%r          輸出自應用啓動到輸出該日誌信息所耗費的毫秒數 

%t          輸出產生該日誌事件的線程名

相關文章
相關標籤/搜索