
好吧,我承認(rèn)我是一個(gè)標(biāo)題黨。還有,本來我以為這張圖會(huì)很帥,但是并沒有我想象中的那種帥氣...,看來我的藝術(shù)氣息完全被社會(huì)給磨滅了。
好了,廢話少說,其實(shí)這一篇本質(zhì)上就是log4j的學(xué)習(xí)記錄。
前言
如果你還不知道log4j的話,建議你馬上關(guān)掉當(dāng)前網(wǎng)頁先去了解一下log4j;
如果你了解了log4j的話,建議你馬上關(guān)掉當(dāng)前網(wǎng)頁,去做一些其他的有意義的事情,我不覺得重復(fù)一個(gè)自己會(huì)的東西是一件有價(jià)值的事情;
如果你知道log4j,但是卻不知道怎么使用,或者不太熟悉,你可以看一下我的筆記。
OK,以上全是廢話,我是一個(gè)逗比!
簡介
log4j是干什么的
log4j是Apache的一個(gè)開源項(xiàng)目,主要功能是打印日志信息,以各種形式在各種地方花式打印日志。
使用log4j的準(zhǔn)備工作
使用log4j就必須要引入其jar包。
附上官網(wǎng)地址http://logging.apache.org/log4j/2.x/download.html
如果你用maven
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
當(dāng)然,這里的maven依賴不是最新的版本。如果想用最新版本,在網(wǎng)上隨隨便便就能找到,具體就不說了。
使用
代碼
按照用過程來說,我們首先寫好配置文件然后在進(jìn)行代碼的編寫。但是由于代碼的編寫比較簡單單一,并且在這里我們把不同的配置方式結(jié)果都是用相同的代碼進(jìn)行比較,所以這里就暫且本末倒置,先把代碼部分放上來。
import org.apache.log4j.Logger;
public class Log4jDemo {
private static Logger logger = Logger.getLogger(Log4jDemo.class);
public static void main(String[] args) {
logger.debug("@debug");
logger.info("@info");
logger.error("@error");
logger.warn("@warn");
}
}
配置
log4j可以使用xml文件配置,也可以使用properties文件進(jìn)行配置。
在日常使用中,我們基本上都使用properties文件進(jìn)行配置。這里就以properties文件進(jìn)行配置舉例說明。在此之前我們需要新建一個(gè)log4j.properties配置文件并將其放在項(xiàng)目根目錄下。
在log4j的配置中,有以下三大必要要素。
- 日志級(jí)別
- 日志輸出位置
- 日志輸出樣式
接下來我們看具體配置:
日志級(jí)別
log4j中日志級(jí)別一共有5級(jí),加上全開與全關(guān)兩個(gè)狀態(tài),一共有7個(gè)狀態(tài):
| 狀態(tài) | 級(jí)別 |
|---|---|
| all | Integer.MIN_VALUE |
| debug | 10000 |
| info | 20000 |
| warn | 30000 |
| error | 40000 |
| fatal | 50000 |
| off | Integer.MAX_VALUE |
從上到下級(jí)別的值是增加的,但是權(quán)重是逐漸降低的。權(quán)重的排名如下:
all>debug>info>warn>error>fatal>off
我們選擇打印某個(gè)級(jí)別的日志的時(shí)候,權(quán)重不大于這個(gè)級(jí)別的日志都會(huì)被打印出來。例如:我們選擇info級(jí)別的日志,則info、warn、error、fatal都會(huì)被打印出來,但是debug不會(huì)被打印出來。
日志的各種級(jí)別以及優(yōu)先級(jí)已經(jīng)分析清楚了,那么具體是怎么配置的呢?
log4j.rootLogger = [leven],[appendername]
舉例:
log4j.rootLogger = debug,myAppender
在上邊的例子中,我們配置日志的級(jí)別為debug級(jí),還定義了一個(gè)名為myAppender的appender
輸出類型
在log4j里一共提供了5種輸出類型,分別是:
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ā)送到任意指定的地方)
舉例:
log4j.appender.myAppender = org.apache.log4j.ConsoleAppender
在上邊的例子中,我們定義為控制臺(tái)輸出,其中myAppender為上邊定義日志級(jí)別的時(shí)候我們定義的那個(gè)appender
輸出格式
在log4j里一共提供了4種輸出格式,分別是:
org.apache.log4j.HTMLLayout(HTML表格形式)
org.apache.log4j.SimpleLayout(日志級(jí)別信息、輸出字符串)
org.apache.log4j.TTCCLayout(日志級(jí)別、產(chǎn)生日志的線程、輸出字符串)
org.apache.log4j.PatternLayout(自己指定輸出格式)
舉例:
log4j.appender.appender1.layout = org.apache.log4j.SimpleLayout
在上邊的例子中,我們定義了一個(gè)SimpleLayout(包含日志信息的級(jí)別和信息字符串)類型的輸出格式。
自定義格式:
%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 )
實(shí)戰(zhàn)舉例
log4j.rootLogger = debug,stdout,appender1,appender2
# 輸出到控制臺(tái)
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.TTCCLayout
#輸出到日志文件
log4j.appender.appender1 = org.apache.log4j.DailyRollingFileAppender
#輸出日志文件位置
log4j.appender.appender1.File = logs/log.log
#以追加的方式添加
log4j.appender.appender1.Append = true
#輸出權(quán)重不大于DEBUG的日志
log4j.appender.appender1.Threshold = DEBUG
log4j.appender.appender1.layout = org.apache.log4j.TTCCLayout
#保存異常信息到單獨(dú)文件
log4j.appender.appender2 = org.apache.log4j.DailyRollingFileAppender
#輸出日志文件位置
log4j.appender.appender2.File = logs/error.log
#以追加的方式添加
log4j.appender.appender2.Append = true
#只輸出權(quán)重不大于ERROR日志
log4j.appender.appender2.Threshold = ERROR
log4j.appender.appender2.layout = org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern = %d %p %l - %m %n
輸出日志結(jié)果:
log.log
[main] DEBUG com.zhangyingwei.log4jdemo.debug_console.Log4jDemo - @debug
[main] INFO com.zhangyingwei.log4jdemo.debug_console.Log4jDemo - @info
[main] WARN com.zhangyingwei.log4jdemo.debug_console.Log4jDemo - @warn
[main] ERROR com.zhangyingwei.log4jdemo.debug_console.Log4jDemo - @error
[main] FATAL com.zhangyingwei.log4jdemo.debug_console.Log4jDemo - @fatal
error.log
2015-11-28 23:17:00,371 ERROR com.zhangyingwei.log4jdemo.debug_console.Log4jDemo.main(Log4jDemo.java:12) - @error
2015-11-28 23:17:00,375 FATAL com.zhangyingwei.log4jdemo.debug_console.Log4jDemo.main(Log4jDemo.java:13) - @fatal
OK,到這里就先告一段落了,具體其他高級(jí)功能待學(xué)習(xí)后再來記錄。
END