knowing logback

Logback是由log4j創(chuàng)始人Ceki Gülcü設計的又一個開源日志組件。根據logback官網上的說明:

Logback is intended as a successor to the popular log4j project, picking up where log4j leaves off.

logback旨在替代log4j成為最通用的日志框架美莫。相比log4j页眯,Ceki重寫了log4j的內核形成了logback,這使得在一些關鍵執(zhí)行路徑上logback的性能相比log4j提升10倍以上厢呵。而且logback的初始化內存加載也更小了餐茵。

總所周知slf4j是一個標準的日志接口,而logback則是非常標準的實現(xiàn)述吸。以至于未來替換掉logback非常容易。

這里來看看logback的幾個組件。

appender

appender是logback中定義輸出位置的組件蝌矛,它明確了日志輸出的位置道批,是控制臺、文件還是數據庫等等入撒。

logback中兩個最經典的實現(xiàn)就是ConsoleAppenderFileAppender了隆豹。除此之外還有很多非常實用的實現(xiàn),例如:等等茅逮。

如果所有現(xiàn)有的實現(xiàn)都不能滿足我們的需求也不要緊璃赡,logback作為slf4j的實現(xiàn)框架,為我們提供了非常好的擴展献雅。

如果我們需要自己實現(xiàn)一個appender碉考,那么我們就新寫一個類,繼承AppenderBase就可以了挺身。

public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
    public void append(ILoggingEvent event) {
        // export the log to custom place
    }
}

Encoder

appender負責告訴logback把日志送到哪里去侯谁,那么怎么顯示就需要接下來介紹的一些列組件了,其中Encoder組件負責將日志事件轉換成二進制流的形式傳遞到相應的位置上章钾。

配置中默認使用的Encoder類型是ch.qos.logback.classic.encoder.PatternLayoutEncoder墙贱。

layout

Encoder負責傳遞日志流,而layout則負責將一條條日志根據我們的習慣轉換成可以閱讀的文字贱傀。這也是我們在配置logback中最需要自定義的部分了惨撇。

最常見的場景就是我們使用ch.qos.logback.classic.PatternLayout這個類了。

平時我們在配置中使用的配置pattern標簽使用的就是這個類府寒。

<pattern>
    %d{yyyy-MM-dd HH:mm:ss} |-%-5level ${PID:- } in %-50(%logger[%thread]) : %msg%n
</pattern>

配置中具體的模板轉換詞可以參考logback的說明http://logback.qos.ch/manual/layouts.html#conversionWord)魁衙。

filter

在logback中,我們可以根據自己的需求定制出相對應的規(guī)則椰棘,過濾掉一些日志纺棺,減少排查時候的錯誤信息。完成這個過濾規(guī)則定制的組件就是filter邪狞。

每個過濾器都會實現(xiàn)一個decide()方法祷蝌,這個方法會返回一個FilterReply枚舉類對象,FilterReply中有DENY帆卓,NEUTRAL巨朦,ACCEPT三種類型:

  • DENY:日志將立即被拋棄不再經過其他過濾器
  • NEUTRAL:有序列表里的下個過濾器過接著處理日志
  • ACCEPT:日志會被立即處理,不再經過剩余過濾器

filter中最常用的可能就是LevelFilter了剑令。LevelFilter可以幫助過濾指定的日志的等級糊啡。

舉個栗子,比如我在一個APPENDER組件中放入兩個filter

<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>INFO</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

這個上面這個配置中吁津,每條日志都會被檢查是不是INFO等級的日志棚蓄,如果是則被接受堕扶,如果不是就被丟給下一個filter,第二個filter開始檢查是不是ERROR等級梭依,如果等級是日志則被打印稍算,否則日志就被丟棄。

如果我們自己想去實現(xiàn)一個filter役拴,可以定義一個繼承ch.qos.logback.classic.filter.Filter的類糊探。在decide()類中去寫自己的規(guī)則就可以了。

如果我們希望自己定義的filter也能像LevelFilter一樣使用onMatchonMismatch兩個標簽河闰,可以選擇繼承ch.qos.logback.classic.filter.AbstractMatcherFilter這個類科平。

Spring Boot和logback

Spring Boot借助成熟的Spring體系,已經在Java生態(tài)中大紅大紫了姜性,Spring Boot也將logback作為了自己的默認日志處理框架瞪慧。

一般情況下logback的配置文件會被取成logback.xml,但是Spring Boot中如果需要使用SpringBoot的一些插件污抬,那么需要將插件的配置文件文件名稱設置成logback-spring.xml,因為logback.xml加載的時機太早了汞贸,以至于Spring還沒有啟動logback的配置以及完成了。

Spring Boot主要解決的問題就是配置問題印机,在logback中原先要讀取配置是比較麻煩的矢腻。

Spring Boot提供了一個插件springProperty:

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
    <remoteHost>${fluentHost}</remoteHost>
    ...
</appender>

這樣配置文件會自動從application.properties文件中讀取相應的配置,并在logback中使用這些變量射赛。

針對Spring Boot一個jar多柑,四處運行 的宗旨,Spring Boot還提供了一個springProfile的插件:

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev, staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

這樣logback就會根據Spring Boot當時所處的環(huán)境,切換到對應的配置上楣责。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末竣灌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秆麸,更是在濱河造成了極大的恐慌初嘹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沮趣,死亡現(xiàn)場離奇詭異屯烦,居然都是意外死亡,警方通過查閱死者的電腦和手機房铭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門驻龟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缸匪,你說我怎么就攤上這事翁狐。” “怎么了凌蔬?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵露懒,是天一觀的道長闯冷。 經常有香客問我,道長隐锭,這世上最難降的妖魔是什么窃躲? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮钦睡,結果婚禮上,老公的妹妹穿的比我還像新娘躁倒。我一直安慰自己荞怒,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布秧秉。 她就那樣靜靜地躺著褐桌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪象迎。 梳的紋絲不亂的頭發(fā)上荧嵌,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音砾淌,去河邊找鬼啦撮。 笑死,一個胖子當著我的面吹牛汪厨,可吹牛的內容都是我干的赃春。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劫乱,長吁一口氣:“原來是場噩夢啊……” “哼织中!你這毒婦竟也來了?” 一聲冷哼從身側響起衷戈,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狭吼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后殖妇,有當地人在樹林里發(fā)現(xiàn)了一具尸體刁笙,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年拉一,在試婚紗的時候發(fā)現(xiàn)自己被綠了采盒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔚润,死狀恐怖磅氨,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情嫡纠,我是刑警寧澤烦租,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布延赌,位于F島的核電站,受9級特大地震影響叉橱,放射性物質發(fā)生泄漏挫以。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一窃祝、第九天 我趴在偏房一處隱蔽的房頂上張望掐松。 院中可真熱鬧,春花似錦粪小、人聲如沸大磺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杠愧。三九已至,卻和暖如春逞壁,著一層夾襖步出監(jiān)牢的瞬間流济,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工腌闯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绳瘟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓绑嘹,卻偏偏與公主長得像稽荧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子工腋,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理姨丈,服務發(fā)現(xiàn),斷路器擅腰,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評論 6 342
  • 在應用程序中添加日志記錄總的來說基于三個目的:監(jiān)視代碼中變量的變化情況蟋恬,周期性的記錄到文件中供其他應用進行統(tǒng)計分析...
    時待吾閱讀 5,046評論 1 13
  • 8.7 Spring Boot集成日志 SLF4J與Logback簡介 Java日志框架眾多,常用的有java.u...
    光劍書架上的書閱讀 10,485評論 3 31
  • Spring Boot-日志配置(超詳細) 更新日志:20170810 更新通過 application.yml傳...
    inke閱讀 67,343評論 9 122