Log4j2 簡(jiǎn)單使用

日志是一個(gè)系統(tǒng)經(jīng)常用到的功能蒸辆,我們可以在調(diào)試的時(shí)候依靠日志查看輸出跟磨,在程序運(yùn)行的時(shí)候通過查看日志判斷程序運(yùn)行狀態(tài)定罢。在Java世界中,有一個(gè)非常著名的日志類庫(kù)——Log4j〈就妫現(xiàn)在Log4j也有了新版本直撤,就是Log4j2。新版本的好處我就不多說了蜕着。讓讓我們來開始使用吧谋竖。

引入Log4j2

要使用Log4j2红柱,第一步就是先導(dǎo)入它的jar包。如果是普通項(xiàng)目的話蓖乘,到log4j2官網(wǎng)下載jar包锤悄,然后將log4j-api-2.7.jarlog4j-core-2.7.jar添加到你項(xiàng)目的類路徑下。

如果使用Maven或者Gradle的話嘉抒,到mvn倉(cāng)庫(kù)查詢查找這兩個(gè)包零聚,然后添加到項(xiàng)目依賴中。這樣就完成了準(zhǔn)備工作些侍。

然后打開項(xiàng)目握牧,添加以下兩句,創(chuàng)建一個(gè)Logger并調(diào)試一些信息娩梨。注意這里的Logger和LogManager兩個(gè)類的全名分別是org.apache.logging.log4j.LogManagerorg.apache.logging.log4j.Logger。不要和Java自帶的java.util.logging下的日志類搞混了览徒。

Logger logger = LogManager.getLogger();
logger.debug("5555555");

然后運(yùn)行一下項(xiàng)目狈定,就可以看到對(duì)應(yīng)的輸出了。

日志級(jí)別

如果你照著前面的做了习蓬,就會(huì)發(fā)現(xiàn)其實(shí)什么輸出都沒有纽什,只有這么一句話:ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.。這是說因?yàn)闆]找到配置文件躲叼,所以使用默認(rèn)的日志級(jí)別芦缰,向控制臺(tái)只輸出錯(cuò)誤信息。這就引出了一個(gè)日志級(jí)別的問題枫慷。

日志分為幾個(gè)級(jí)別让蕾,按照從輕往重如此排列:trace、debug或听、info探孝、warn、error誉裆、fatal顿颅。相應(yīng)的Logger類也有這么幾個(gè)對(duì)應(yīng)方法,用于輸出相應(yīng)的日志信息足丢。如果我們定義了一個(gè)級(jí)別粱腻,那么低于這個(gè)級(jí)別的日志不會(huì)輸出。由于沒有配置文件斩跌,所以默認(rèn)情況下的日志級(jí)別是error绍些,正如前面的輸出那樣。這樣一來耀鸦,低于error的日志就不會(huì)輸出遇革。所以我們回到剛才,將debug方法改為error方法,再次運(yùn)行項(xiàng)目萝快。這次出現(xiàn)了日志輸出锻霎。

22:21:58.600 [Test worker] ERROR yitian.bean.BeanTest - 5555555

配置文件

前面已經(jīng)簡(jiǎn)單演示了Log4j2的用法。下面就來說說Log4j2的配置文件揪漩。Log4j2既可以使用配置文件配置旋恼,也可以使用編程方式用代碼來配置。這里簡(jiǎn)單說說配置文件方式奄容。Log4j2支持多種配置文件冰更,XML、JSON昂勒、YAML和perperties文件都支持蜀细,當(dāng)然最常用的還是XML文件。將配置文件放在類路徑下即可戈盈,如果使用Maven或者Gradle的話奠衔,就是在resources文件夾下。

前面如果沒有配置文件的話塘娶,Log4j2就會(huì)使用一個(gè)默認(rèn)配置归斤,等效于下面的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

配置文件有兩個(gè)主要的地方刁岸,第一個(gè)是Appender節(jié)點(diǎn)脏里,這個(gè)節(jié)點(diǎn)下會(huì)有很多Appender,也就是我們?nèi)罩据敵龅哪康牡睾缡铮梢允强刂婆_(tái)也可以是某個(gè)文件迫横,甚至是專用的遠(yuǎn)程日志服務(wù)器。默認(rèn)情況下只有一個(gè)控制臺(tái)酝碳。第二種重要的節(jié)點(diǎn)是Loggers節(jié)點(diǎn)员淫,這個(gè)節(jié)點(diǎn)下可以有很多個(gè)Logger,每個(gè)Logger可以記錄不同的信息击敌,Logger之間也可以共享某些配置介返。上面定義了一個(gè)Root Logger,如果沒有指定Logger 的名稱或者指定的Logger不存在沃斤,就會(huì)使用Root圣蝎,而且Root Logger下的配置默認(rèn)會(huì)被其他Logger繼承,除非它們定義了自己的配置衡瓶。

然后我們?cè)倩仡^看看Appenders節(jié)點(diǎn)徘公,其中有這么一段:<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>。這里定義的就是日志的輸出格式哮针。下面來簡(jiǎn)單說說常用的輸出格式关面。

  • %d{HH:mm:ss.SSS} 輸出時(shí)間坦袍,精確度為毫秒。
  • %t 輸出當(dāng)前線程的名稱等太。
  • %-5level 輸出日志級(jí)別捂齐,-5表示左對(duì)齊并且固定占5個(gè)字符寬度,如果不足用空格補(bǔ)齊缩抡。
  • %logger 輸出Logger名稱奠宜,如果是Root的話就沒有名稱。
  • %msg 日志信息瞻想,也就是我們傳入的信息压真。
  • %n 換行。
  • %F 輸出所在的文件名蘑险。
  • %L 輸出行號(hào)滴肿。
  • %M 輸出所在方法名。
  • %l 輸出語句所在的位置信息佃迄,包括文件名泼差、類名、方法名和屎、行號(hào)。

自定義配置

自定義Logger

說了這么多春瞬,現(xiàn)在我們就可以開始自定義配置文件了柴信。首先我們來添加一個(gè)新的Logger,來記錄所有信息宽气,這個(gè)Logger的名稱就叫做TRACE_ALL吧随常。這個(gè)Logger有兩個(gè)屬性,level指定記錄級(jí)別萄涯,additivity指定傳遞性绪氛。假如傳遞性指定為true,如果我們現(xiàn)在使用TRACE_ALL記錄一個(gè)debug級(jí)別的日志涝影,由于debug級(jí)別也符合Root的記錄范圍枣察,這樣這個(gè)日志就會(huì)記錄兩遍。最后燃逻,我們用<AppenderRef ref="Console"/>指定使用上面的控制臺(tái)Appender序目。

現(xiàn)在配置文件應(yīng)該是這樣。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
        </Root>
        <Logger name="TRACE_ALL" level="trace" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>
</Configuration>

程序代碼是這樣的伯襟。在調(diào)用getLogger的時(shí)候指定要使用哪一個(gè)Logger猿涨。

Logger logger = LogManager.getLogger("TRACE_ALL");
logger.info("5555555");

自定義Appender

除了使用Console作為日志輸出目的地之外,我們還可以定義其他的輸出姆怪,比如文件叛赚。下面我們來新建一個(gè)文件Appender澡绩。在Appenders節(jié)點(diǎn)下新建一個(gè)File節(jié)點(diǎn),name和fileName屬性分別指定Appender名稱和目的文件名俺附。然后我們指定TRACE_ALL Logger同時(shí)將日志輸出到控制臺(tái)和文件肥卡。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="File" fileName="D:\Desktop\mylog.txt">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
        </Root>
        <Logger name="TRACE_ALL" level="trace" additivity="true">
            <AppenderRef ref="File"/>
            <AppenderRef ref="Console"/>
        </Logger>
    </Loggers>
</Configuration>

再次運(yùn)行程序,我們就會(huì)發(fā)現(xiàn)這次在對(duì)應(yīng)的路徑下多出一個(gè)文件昙读,這個(gè)文件的內(nèi)容就是我們的輸出召调。

到此為止,大家應(yīng)該可以基本使用Log4j2了蛮浑。如果有更加復(fù)雜的需求唠叛,就需要自己去查閱相關(guān)資料了。

參考資料

http://blog.csdn.net/autfish/article/details/51203709

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沮稚,一起剝皮案震驚了整個(gè)濱河市艺沼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕴掏,老刑警劉巖障般,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盛杰,居然都是意外死亡挽荡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門即供,熙熙樓的掌柜王于貴愁眉苦臉地迎上來定拟,“玉大人,你說我怎么就攤上這事逗嫡∏嘧裕” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵驱证,是天一觀的道長(zhǎng)延窜。 經(jīng)常有香客問我,道長(zhǎng)抹锄,這世上最難降的妖魔是什么逆瑞? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮伙单,結(jié)果婚禮上呆万,老公的妹妹穿的比我還像新娘。我一直安慰自己车份,他們只是感情好谋减,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著扫沼,像睡著了一般出爹。 火紅的嫁衣襯著肌膚如雪庄吼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天严就,我揣著相機(jī)與錄音总寻,去河邊找鬼。 笑死梢为,一個(gè)胖子當(dāng)著我的面吹牛渐行,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铸董,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼祟印,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了粟害?” 一聲冷哼從身側(cè)響起蕴忆,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悲幅,沒想到半個(gè)月后套鹅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汰具,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年卓鹿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留荔。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吟孙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出存谎,到底是詐尸還是另有隱情拔疚,我是刑警寧澤肥隆,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布既荚,位于F島的核電站,受9級(jí)特大地震影響栋艳,放射性物質(zhì)發(fā)生泄漏恰聘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一吸占、第九天 我趴在偏房一處隱蔽的房頂上張望晴叨。 院中可真熱鬧,春花似錦矾屯、人聲如沸兼蕊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孙技。三九已至产禾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牵啦,已是汗流浹背亚情。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哈雏,地道東北人楞件。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像裳瘪,于是被迫代替她去往敵國(guó)和親土浸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況盹愚,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,057評(píng)論 1 13
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況栅迄,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 4,991評(píng)論 0 6
  • 一、Log4j簡(jiǎn)介 Log4j有三個(gè)主要的組件:Loggers(記錄器)皆怕,Appenders (輸出源)和Layo...
    默默守護(hù)閱讀 1,914評(píng)論 2 8
  • from:https://www.cnblogs.com/ITtangtang/p/3926665.html一毅舆、L...
    enshunyan閱讀 3,294評(píng)論 0 0
  • log4j是一個(gè)被廣泛使用的Java日志記錄框架,通過使用該框架愈腾,我們可以在自己的項(xiàng)目中根據(jù)自身需求靈活配置日志輸...
    LilacZiyun閱讀 5,933評(píng)論 0 7