log4j.rootLogger=INFO, Console ,File (設(shè)置info級(jí)別輸出那么info以下的級(jí)別就不輸出了 在控制臺(tái)犀填,在文件中)
Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%nFile
log4j.appender.File = org.apache.log4j.FileAppender
log4j.appender.File.File = d://log4j2.log
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d [%t] %-5p [%c] - %m%n級(jí)別
FATAL ERROR WARN INFO DEBUG(DESC)
輸出目的的
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ā)送到任意指定的地方輸出格式
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式)拷获,
org.apache.log4j.SimpleLayout(包含日志信息的級(jí)別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時(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)為“/r/n”纸型,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 )logger.debug("The money is " + someMethod());
假設(shè)我們的日志級(jí)別設(shè)置為info,那這句話不會(huì)輸出日志,但這個(gè)方法還是會(huì)調(diào)用(預(yù)判斷作用)尸诽。要調(diào)用這個(gè)方法甥材,必須提供參數(shù)。someMethod()方法返回的結(jié)果就是參數(shù)的一部分性含。假設(shè)someMethod()要執(zhí)行n秒鐘洲赵,n秒鐘后,進(jìn)入到debug()方法里胶滋;
但是日志級(jí)別為info板鬓。結(jié)果是日志雖然沒有輸出,卻花費(fèi)了n秒鐘來構(gòu)造參數(shù)究恤。很顯然這里得不償失的俭令。盡管實(shí)際應(yīng)用中幾乎不可能有這種花n秒鐘來構(gòu)造這樣一個(gè)參數(shù)的情況,但如果并發(fā)數(shù)大的話部宿,這樣寫還是會(huì)影響系統(tǒng)的性能的抄腔。這個(gè)時(shí)候瓢湃,就應(yīng)該寫成:
if(logger.isDebugEnabled()){
logger.debug("The money is " + someMethod());
}
如果debug的參數(shù)很簡單的話,也可以直接寫 logger.debug(message)的赫蛇。官 方的說法绵患,執(zhí)行一次logger.isDebugEnabled()這樣的判斷花費(fèi)的時(shí)間大概是 寫日志時(shí)間的萬分之一.雖然這個(gè)比例很小,但是悟耘,程序中的任何地方放到并 發(fā)的環(huán)境下落蝙,我們就得重新考慮了。