logback配置文件詳解

1咸这、說明

logback日志框架由三部分組成:logback-core欠肾、logback-access关炼、logback-classic涩笤。使用起來也很方便需要在項目目錄下增加logback.xml文件昆淡。在springboot項目锰瘸,框架已經(jīng)集成了logback(默認(rèn)的日志框架),只需要在項目resource下配置logback.xml文件或者logback-spring.xml文件昂灵。這里主要記錄的是logback配置文件的內(nèi)容部分避凝。

2、logback. xml文件

在學(xué)習(xí)logback時眨补,我們需要了解設(shè)計者的思維方式管削。我們才能更好的配置出我們需要的日志策略及性能。

2.1 設(shè)計思路

(1)控制臺日志和寫入文件日志分開
日志本身是可追加寫入的撑螺,定義為追加器appender含思,控制臺和寫入文件日志分別有ConsleAppdenderFileAppender兩個追加器處理。

(2)日志打印的內(nèi)容可以控制參數(shù)格式
打印出的日志一定是規(guī)整的实蓬,便于開發(fā)跟蹤問題茸俭。例如:問題發(fā)生的時間吊履,由于大部分程序都是多線程運行的,則需要知道每個業(yè)務(wù)請求的線程號调鬓,出問題的使用到的類名等等.

<encoder>
     <pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern>
 </encoder>

(3)寫入文件中的日志不宜過大同時考慮時間跨天問題
考慮到將文件分開(可卷起Rolling)艇炎,則使用升級的追加器RollingFileAppender,同時分開規(guī)則(Policy)考慮到跨天跨時間 腾窝。則在追加器中定義拆分規(guī)則:SizeAndTimeBasedRollingPolicy

 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${log.base}/%d{yyyyMMdd}/${app.name}_%d{yyyyMMdd}_%i.log.gz</fileNamePattern>
        <!--文件大小-->
       <maxFileSize>2GB</maxFileSize>
      <!--歷史個數(shù)-->
      <maxHistory>180</maxHistory>
</rollingPolicy>

(4)日志應(yīng)該可以靈活指定輸出級別
針對“ com.sports ”包下的日志缀踪,控制臺和日志文件都使用debug級別。

    <logger name="com.sports" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="myAppender"/>-->
    </logger>

(5)必須對主體日志指定輸出級別
雖然我們會對不同的包或者框架下日志設(shè)置輸出級別虹脯,但不可缺少主體日志輸出級別:root

 <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="mqAppender"/>-->
    </root>

(6)日志可以異步寫入
通常日志是和業(yè)務(wù)應(yīng)用公用同一個線程驴娃,寫系統(tǒng)日志會有IO開銷,會損耗性能循集,我們應(yīng)該可以異步寫日志

   <!-- 異步輸出 -->
    <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 不丟失日志.默認(rèn)的,如果隊列的80%已滿,則會丟棄TRACT唇敞、DEBUG、INFO級別的日志 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 更改默認(rèn)的隊列的深度,該值會影響性能.默認(rèn)值為256 -->
        <queueSize>256</queueSize>
        <!-- 添加附加的appender,最多只能添加一個 -->
        <appender-ref ref="INFO-LOG"/>
    </appender>
2.2 文件樣例
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern>
        </encoder>
    </appender>
    <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern><![CDATA[%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [level: %p] [Thread: %t] [ Class:%c >> Method: %M:%L ]%n%p:%m%n]]></pattern>
        </encoder>
        <file>logs/sports-web.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>logs/sports-web.-%d{yyyyMMdd}.%i.log</fileNamePattern>
            <!-- 每天一個日志文件咒彤,當(dāng)天的日志文件超過10MB時疆柔,生成新的日志文件,當(dāng)天的日志文件數(shù)量超過totalSizeCap/maxFileSize镶柱,日志文件就會被回滾覆蓋旷档。 -->
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>30</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy> 
    </appender>
    <logger name="com.sports" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="myAppender"/>-->
    </logger>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="LOG_FILE"/>
        <!--<appender-ref ref="mqAppender"/>-->
    </root>
</configuration>

3、日志格式pattern部分

logback框架日志格式通過PatternLayout方式配置歇拆,樣例:

<encoder>   
   <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>   
</encoder 

encoder作用:①把日志信息轉(zhuǎn)換成字節(jié)數(shù)組鞋屈;②把字節(jié)數(shù)組寫入到輸出流。
PatternLayoutEncoder 是唯一有用的且默認(rèn)的encoder故觅,encoder下只有一個pattern節(jié)點厂庇。

(1)% + “轉(zhuǎn)換符號”輸出信息
%t : t表示線程的轉(zhuǎn)換符,打印控制臺" [Thread: restartedMain]"
pattern中的轉(zhuǎn)換符列表

轉(zhuǎn)換符 說明 使用方式 備注
m / msg / message 應(yīng)用程序輸出信息 %msg 主要內(nèi)容信息
M / method 輸出執(zhí)行日志請求的方法名逻卖。 %M 盡量避免使用宋列,除非執(zhí)行速度不造成任何問題
p / le / level 日志等級 %p
L / line 行號 %line 盡量避免使用,除非執(zhí)行速度不造成任何問題

(2)格式修飾符
與轉(zhuǎn)換符共同使用评也,可選的格式修飾符位于“%”和轉(zhuǎn)換符之間
左對齊 修飾符 :符號是減號“-”炼杖;接著是可選的最小寬度 修飾符,用十進制數(shù)表示


(3)使用slf4j中的MDC新增線程參數(shù)
%X”用于輸出和當(dāng)前線程相關(guān)聯(lián)的MDC(嵌套診斷環(huán)境)盗迟,格式 %X{xxx}坤邪,使用org.slf4j.MDC添加key/value即可增加新值,

 <encoder>
     <pattern>%d{yyyy-MM-dd hh:mm:ss} [%thread] [traceId = %X{traceId}] [%logger{32}] - %msg%n</pattern>
</encoder>

其中tracId是在MDC中設(shè)置進當(dāng)前線程中的參數(shù)罚缕,記得在線程運行完時清除clear掉艇纺。

@Before(value = "pointCut()")
public void before(JoinPoint joinPoint){
      // 省略代碼...
      MDC.put("traceId", UUID.randomUUID().toString());
}
  • 結(jié)束清除
@AfterReturning(value = "pointCut()", returning = "val")
public void afterReturning(JoinPoint joinPoint, Object val) {
         // 省略代碼...
        MDC.clear();
}
  • 各個參數(shù)說明
示例 說明
%X 輸出所有值
%X{testKey} 輸出testKey所對應(yīng)的value,且無默認(rèn)值
%X{testKey:-} 輸出testKey所對應(yīng)的value,默認(rèn)為空
%X{testKey:-aaa} 輸出testKey所對應(yīng)的value黔衡,默認(rèn)為aaa
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚓聘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盟劫,更是在濱河造成了極大的恐慌夜牡,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侣签,死亡現(xiàn)場離奇詭異塘装,居然都是意外死亡,警方通過查閱死者的電腦和手機影所,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門蹦肴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猴娩,你說我怎么就攤上這事阴幌。” “怎么了卷中?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵裂七,是天一觀的道長。 經(jīng)常有香客問我仓坞,道長,這世上最難降的妖魔是什么腰吟? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任无埃,我火速辦了婚禮,結(jié)果婚禮上毛雇,老公的妹妹穿的比我還像新娘嫉称。我一直安慰自己,他們只是感情好灵疮,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布织阅。 她就那樣靜靜地躺著,像睡著了一般震捣。 火紅的嫁衣襯著肌膚如雪荔棉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天蒿赢,我揣著相機與錄音润樱,去河邊找鬼。 笑死羡棵,一個胖子當(dāng)著我的面吹牛壹若,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼店展,長吁一口氣:“原來是場噩夢啊……” “哼养篓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赂蕴,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤柳弄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后睡腿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體语御,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年席怪,在試婚紗的時候發(fā)現(xiàn)自己被綠了应闯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡挂捻,死狀恐怖碉纺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刻撒,我是刑警寧澤骨田,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站声怔,受9級特大地震影響态贤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醋火,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一悠汽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芥驳,春花似錦柿冲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丽猬,卻和暖如春宿饱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背宝鼓。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工刑棵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人愚铡。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓蛉签,卻偏偏與公主長得像胡陪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子碍舍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

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