【一場遲到的約會(huì)】我與log4j那點(diǎn)事


好吧,我承認(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,165評(píng)論 0 6
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,246評(píng)論 1 13
  • 一、Log4j簡介 Log4j有三個(gè)主要的組件:Loggers(記錄器),Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,985評(píng)論 2 8
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,290評(píng)論 6 342

友情鏈接更多精彩內(nèi)容