springboot日志體系---log4j2

最近調(diào)試代碼和運(yùn)行代碼的時(shí)候,一些日志打印的亂七八槽懊蒸,根據(jù)日志很難快速定位到問(wèn)題,感覺(jué)自己是為了打印日志而打印日志悯搔,花了點(diǎn)時(shí)間把日志的相關(guān)整理了一下骑丸,意在讓日志發(fā)揮最大的作用。

前言

本文解決以下問(wèn)題:

  • 為何使用log4j2
  • springboot下log4j2日志的使用
  • 控制臺(tái)日志顯示的級(jí)別和文件保存的日志不同
  • idea控制臺(tái)顏色日志的輸出

正文

log4j2

目前有關(guān)日志的開(kāi)源代碼很多,如log4j通危、sl4j和log4j2,為什么我選擇使用log4j2呢铸豁,看完下面兩篇性能的對(duì)比,相信你也會(huì)選擇log4j2
http://www.reibang.com/p/483a9cf61c36
https://blog.souche.com/logback-log4j-log4j2shi-ce/?utm_source=tuicool&utm_medium=referral

springboot集成Log4j2

需要將springboot內(nèi)置的日志剃掉,然后引入log4j2菊碟,pom如下

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

然后需要在resource下面添加log4j2.xml配置文件节芥,當(dāng)然了如果你不添加,springboo會(huì)提示你沒(méi)有對(duì)應(yīng)文件逆害,并使用默認(rèn)的配置文件藏古,這個(gè)時(shí)候級(jí)別可以在application.properties中配置
logging.level.root=error
控制臺(tái)打印結(jié)果

圖一.png

當(dāng)然了,使用配置文件忍燥,配置可以多樣化,下面是默認(rèn)的log4j2配置,log4j2支持xml、json隙姿、yml格式的配置

<?xml version="1.0" encoding="UTF-8"?>  
<configuration status="OFF">  
  <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">  
      <appender-ref ref="Console"/>  
    </root>  
  </loggers>  
</configuration>  

主要結(jié)構(gòu)梅垄,和我們用到的大致如下


圖二.png

appenders里設(shè)置日志的輸出方式、級(jí)別和格式
loggers里設(shè)置全局的級(jí)別和綁定appenders里的name

  • File 日志輸出到文件输玷,可配置覆蓋還是追加

  • RollingFile “滾動(dòng)文件”可作為按日輸出日志的方式

  • Console 控制臺(tái)日志

  • PatternLayout 格式化輸出日志

  • ThresholdFilter“閾值篩選器” 可單獨(dú)設(shè)置appender的輸出級(jí)別

  • loggers里需要匹配每個(gè)appender的名稱 name

詳細(xì)參見(jiàn)官網(wǎng):https://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

稍復(fù)雜的需求

我的服務(wù)一般放在linux服務(wù)器上跑队丝,可能要實(shí)時(shí)查看日志,現(xiàn)有這個(gè)需求“我要打印到控制臺(tái)的日志級(jí)別為Error欲鹏,日志文件里保存的是INFO級(jí)別的日志”這樣在產(chǎn)生錯(cuò)誤的時(shí)候机久,就不會(huì)被大量無(wú)用的代碼干擾。
要使用ThresholdFilter赔嚎,配置如下

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch)膘盖,其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %M() @%L - %msg%n"/>
        </Console>
        <File name="ERROR" fileName="logs/error.log" append="false">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %M() @%L - %msg%n"/>
        </File>
        <!--這個(gè)會(huì)打印出所有的信息,每次大小超過(guò)size尤误,則這size大小的日志會(huì)自動(dòng)存入按年份-月份建立的文件夾下面并進(jìn)行壓縮侠畔,作為存檔-->
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %M() @%L - %msg%n"/>
            <SizeBasedTriggeringPolicy size="5MB"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <appender-ref ref="ERROR" />
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

不要被嚇到了,按照我上面的思維導(dǎo)圖分析一下就很清晰了:
三個(gè)appender:Console损晤、File软棺、RollingFile

  • Console 通過(guò)ThresholdFilter過(guò)濾規(guī)則只輸出ERROR級(jí)別的錯(cuò)誤(onMatch="ACCEPT" onMismatch="DENY" 匹配到的接受,沒(méi)有匹配的走人)
  • File 也通過(guò)ThresholdFilter的方式輸出到日志尤勋,當(dāng)然了append="false" 會(huì)在服務(wù)每次啟動(dòng)的時(shí)候清空日志(覆蓋)
  • RollingFile 因?yàn)槿罩救衷O(shè)置的為INFO喘落,所以不需要ThresholdFilter,這里只需要指定filePattern和SizeBasedTriggeringPolicy就行了

執(zhí)行代碼,查看各文件和控制臺(tái)


圖三.png

完美~

控制臺(tái)顏色輸出日志

注:本人使用的是IDEA最冰,沒(méi)有使用Eclipse瘦棋,可能Eclipse也有類似的插件。
  本地開(kāi)發(fā)與調(diào)試代碼的時(shí)候锌奴,會(huì)不會(huì)感覺(jué)同樣的顏色找日志頭都大了兽狭,別擔(dān)心,idea知道你頭會(huì)大,所以提供了一個(gè)插件Grep Console,讓你頭慢慢的小下來(lái)~下載并重啟后箕慧,這里需要注意將插件默認(rèn)的配色關(guān)閉服球,當(dāng)然了你可以通過(guò)自定義配色,我這里是在xml配置的

圖四.png

然后log4j2.xml配置的如下

...
<Console name="Console" target="SYSTEM_OUT">
            <!--控制臺(tái)只輸出level及以上級(jí)別的信息(onMatch)颠焦,其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%highlight{%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %M() @%L - %msg%n}{FATAL=Bright Red, ERROR=Bright Magenta, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White}"/>
        </Console>
...

結(jié)果


圖五.png

相當(dāng)完美~

后記

相信有了明確的日志輸出斩熊,能提高我們排錯(cuò)的效率,當(dāng)別人看日志累的揉眼睛的時(shí)候伐庭,我們?cè)缫押戎杷矍鑯

代碼在這里
歡迎瀏覽我的博客:http://vector4wang.tk

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市圾另,隨后出現(xiàn)的幾起案子霸株,更是在濱河造成了極大的恐慌,老刑警劉巖集乔,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件去件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡扰路,警方通過(guò)查閱死者的電腦和手機(jī)尤溜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汗唱,“玉大人宫莱,你說(shuō)我怎么就攤上這事×ㄗ铮” “怎么了授霸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)际插。 經(jīng)常有香客問(wèn)我绝葡,道長(zhǎng),這世上最難降的妖魔是什么腹鹉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任藏畅,我火速辦了婚禮,結(jié)果婚禮上功咒,老公的妹妹穿的比我還像新娘愉阎。我一直安慰自己,他們只是感情好力奋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布榜旦。 她就那樣靜靜地躺著,像睡著了一般景殷。 火紅的嫁衣襯著肌膚如雪溅呢。 梳的紋絲不亂的頭發(fā)上澡屡,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音咐旧,去河邊找鬼驶鹉。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铣墨,可吹牛的內(nèi)容都是我干的室埋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伊约,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姚淆!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起屡律,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腌逢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后超埋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體上忍,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纳本,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腋颠。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡繁成,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淑玫,到底是詐尸還是另有隱情巾腕,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布絮蒿,位于F島的核電站尊搬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏土涝。R本人自食惡果不足惜佛寿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望但壮。 院中可真熱鬧冀泻,春花似錦、人聲如沸蜡饵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溯祸。三九已至肢专,卻和暖如春舞肆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背博杖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工椿胯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欧募。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓压状,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親跟继。 傳聞我的和親對(duì)象是個(gè)殘疾皇子种冬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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