logback配置文件詳解

logback配置文件詳解

<?xml version="1.0" encoding="UTF-8"?>

<!-- 根節(jié)點 , logback的全局配置 , 包含3個屬性

? ? scan : 當文件發(fā)生變更時是否重載 , 默認值ture

? ? scanPeriod : 監(jiān)測文件的間隔時間 , 即每隔多少時間掃描一次配置文件 僅當scan=true時生效. 默認間隔時間1min , 如果不寫單位默認是毫秒;

? ? debug : 是否為debug模式 , 為true時會打印出logack內部日志 , 便于查看logback實時信息 . 默認值false

-->

<configuration scan="true" scanPeriod="60 seconds" debug="false">

? ? <!-- 上下文名稱 , 每個logger都關聯(lián)到上下文 , 默認值為default . 設置之后不可動態(tài)修改 -->

? ? <contextName>logback</contextName>

? ? <!-- 定義變量 , 在配置文件其他地方可通過${變量名}訪問 -->

? ? <property name="appName" value="xdemo"/>

? ? <!-- 內部變量 , 獲取時間戳字符串 . key為變量名 , datePattern為解析的日期字符串格式 , 與SimpleDateFormat格式相同 -->

? ? <timestamp key="time" datePattern="yyyyMMdd HHmmss"/>

? ? <!-- 日志輸出組件 有兩個必須的屬性

? ? ? ? name : 當前appender的名稱 , 在logger組件中相關聯(lián)

? ? ? ? class : 日志的輸出控制類 , 通過class將日志輸出到控制臺/文件/遠程socket服務器/數(shù)據(jù)庫等

? ? ? ? ? ? 不同的class有著不同的配置

? ? -->

? ? <!-- ConsoleAppender , 將日志輸出到控制臺 . 有encoder和target兩個子節(jié)點(新版本有filter子節(jié)點 , 在下文中詳細說明) -->

? ? <appender name="console" class="ch.qos.logback.core.ConsoleAppender">

? ? ? ? <!-- 子節(jié)點encoder , 指定日志輸出的格式 , 具體格式配置見下方表格 -->

? ? ? ? <encoder>

? ? ? ? ? ? <pattern>%d{HH:mm:ss} [%thread][%X{traceId}] %-5level %logger{36} - %msg%n</pattern>

? ? ? ? </encoder>

? ? ? ? <!-- 子節(jié)點target , 日志輸出的對象 System.out 或 System.err -->

? ? ? ? <target></target>

? ? </appender>

? ? <!-- FileAppender , 將日志輸出到文件 . 有file/append/encoder/prudent四個子節(jié)點(新版本有filter子節(jié)點 , 在下文中詳細說明) -->

? ? <appender name="file" class="ch.qos.logback.core.FileAppender">

? ? ? ? <!-- 子節(jié)點file , 輸出的目標文件名 , 父級目錄不存在會自動創(chuàng)建 . 無默認值 -->

? ? ? ? <file>xdemo.log</file>

? ? ? ? <!-- 子節(jié)點append , 是否為追加模式 . 為true則日志被追加到文件末尾 , false則清空現(xiàn)文件重新寫入 . 默認值true -->

? ? ? ? <append>true</append>

? ? ? ? <!-- 子節(jié)點encoder , 指定日志輸出的格式 -->

? ? ? ? <encoder>

? ? ? ? ? ? <pattern>%d{HH:mm:ss} [%thread][%X{traceId}] %-5level %logger{36} - %msg%n</pattern>

? ? ? ? </encoder>

? ? ? ? <!-- 子節(jié)點produent , 是否為安全寫入模式 . 為ture則日志會被安全的寫入文件 , 即使其他FileAppender同時做寫入操作 , 效率低 . 默認值false -->

? ? ? ? <prudent>true</prudent>

? ? </appender>

? ? <!-- RollingFileAppender , 將日志動態(tài)輸出到文件 . 通過clas指定策略 ,? 符合某個策略時 , 會自動創(chuàng)建新日志文件并輸出(按日期/大小等) . 有file/append/rollingPolicy等幾個節(jié)點 -->

? ? <!-- RollingFileAppender詳細配置參見下文 -->

? ? <!-- logger 日志返回/級別及輸出目標配置 有必填屬性name和選填屬性level/additivity , 一個appender-ref 子節(jié)點(可配置1個或多個)

? ? ? ? name : 指定遵守該logger約束的一個包或具體的某個類

? ? ? ? level : 日志級別 ,有以下值TRACE, DEBUG, INFO, WARN, ERROR, ALL, OFF , 不區(qū)分大小寫

? ? ? ? additivity : 是否向上級logger傳遞日志信息 , 默認為ture . (如果上級logger也輸出日志 , 則會輸出兩份 . 所以通常情況下配置為false)

? ? -->

? ? <logger name="org.springframework" level="INFO" additivity="false">

? ? ? ? <appender-ref ref="console"/><!-- 輸出到相關聯(lián)的appender中 -->

? ? ? ? <appender-ref ref="file"/>

? ? </logger>

? ? <!-- 更多常用的三方框架logger配置見下文 -->

? ? <!-- root本身也是一個logger節(jié)點(相當于name="root"的logger) , 但僅能配置一個 , 是所有l(wèi)ogger的父級(可以理解為Java中的Object) , 只有一個level屬性, 默認值DEBUG -->

? ? <root level="error">

? ? ? ? <appender-ref ref="console"/>

? ? ? ? <appender-ref ref="file" />

? ? </root>

</configuration>

?RollingFileAppender詳細配置

<!-- RollingFileAppender詳細配置

? ? 其中有file/append/pruduent幾個通用節(jié)點 , 不再詳述 .

? ? 具體講一下rollingPolicy節(jié)點相關 , 該節(jié)點通過class屬性指定不同的配置指定RoolingFileAppender的動態(tài)行為 , 涉及日志文件的移動/重命名等

-->

<!-- TimeBasedRollingPolicy 最常用的動態(tài)策略 , 根據(jù)時間來分割日志 主要有fileNamePattern和maxHistory子節(jié)點 -->

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

? ? <!-- 子節(jié)點fileNamePattern : 文件目錄表達式 , 包含文件名及%d轉換表達式 , %d可以包含一個SimpleDateFormat格式的日期字符串 , 如"yyyyMMdd" , 如省略直接寫%d則默認為"yyy-MM-dd", 則按照日期自動分割每天產(chǎn)生的日志

配置該節(jié)點后 , RollingFileAppender的file節(jié)點可有可無 , 如果同時配置了兩個節(jié)點的話 , 日志文件會歸檔為兩套(一套按日期分割 , 一套整個寫入file指定的文件) -->

? ? <fileNamePattern>/data/logs/%d/xdemo_%d{yyMMdd}.log</fileNamePattern>

? ? <!-- 子節(jié)點maxHistory : 非必填節(jié)點 , 控制歷史歸檔的最大數(shù)量 , 超出該配置則刪除舊文件 . 如果配置按天歸檔且maxHistory為30 , 則只保存最近30天的日志文件(包括為該文件而創(chuàng)建的目錄) -->

? ? <maxHistory>30</maxHistory>

? ? <!-- 子節(jié)點totalSizeCap , 在 1.1.6版本后才開始支持, 配置總日志文件的大小上限 -->

? ? <totalSizeCap>20GB</totalSizeCap>

</rollingPolicy>

<!-- SizeBasedTriggeringProlicy 根據(jù)大小來分割日志 , 只有一個專屬子節(jié)點maxFileSize -->

<rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

? ? <file>/data/logs/xdemo.log</file>

? ? <!-- 單個日志的大小上限 , 超出該上線則新建日志(后綴名_1/2/3)繼續(xù)寫入 -->

? ? <maxFileSize>500MB</maxFileSize>

</rollingPolicy>

<!-- SizeAndTimeBasedRollingPolicy 綜合時間和大小分割 , 單個時間段內超過大小繼續(xù)分割 -->

<!-- ?FixedWindowRollingPolicy 根據(jù)固定窗口算法分割文件? -->

?常用的三方框架logger配置

<!-- 常用的三方框架logger配置 -->

<!-- myBatis/JDBC 日志 -->

<logger name="com.apache.ibatis" level="DEBUG"/>

<logger name="java.sql.Connection" level="DEBUG"/>

<logger name="java.sql.Statement" level="DEBUG"/>

<logger name="java.sql.PreparedStatement" level="DEBUG"/>

<!-- hibernate日志 -->

<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="DEBUG" />

<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />

<logger name="org.hibernate.SQL" level="DEBUG" />

<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />

<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

filter詳細配置

<!-- filter: 日志過濾器 , 可以過濾不符合規(guī)則的內容 , 使之不輸出到控制臺或文件 , 為appender的子節(jié)點

? ? logback過濾器是基于Ternary Logic, 允許多個過濾器搭配使用 , 配置多個過濾器時按照書寫順序依次執(zhí)行

? ? 執(zhí)行一個過濾器會返回以下幾個枚舉值

? ? ? ? ACCEPT: 該日志符合規(guī)則 , 接受處理 . 同時不會再經(jīng)過其他過濾器

? ? ? ? NEUTRAL: 當前過濾器不處理 , 下個過濾器繼續(xù)處理

? ? ? ? DENY: 該日志將被過濾拋棄 , 且不再經(jīng)過其他過濾器

-->

<appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">

? ? <!-- ...其他配置略... -->

? ? <!-- LevelFilter: 級別過濾器; 過濾掉非配置等級的日志 , 只有等于當前級別時才會處理 -->

? ? <filter class="ch.qos.logback.classic.filter.LevelFilter">

? ? ? ? <level>INFO</level>

? ? ? ? <onMatch>ACCEPT</onMatch><!-- 匹配等級的返回值 -->

? ? ? ? <onMismatch>DENY</onMismatch><!-- 不匹配的返回值 -->

? ? </filter>

? ? <!-- ThresholdFilter: 閥值過濾器; 過濾掉低于閥值的日志 , 當日志級別等于或高于閥值 , 過濾器返回NEUTRAL , 否則直接返回DENY -->

? ? <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

? ? ? ? <level>INFO</level>

? ? </filter>

? ? <!-- EvaluatorFilter: 條件過濾器; 評估鑒別日志是否符合指定條件 , 有一個主要的evaluator(鑒定器)子節(jié)點 -->

? ? <filter class="ch.qos.logback.core.filter.EvaluatorFilter">

? ? ? ? <!-- 過濾器 -->

? ? ? ? <evaluator> <!-- 默認為 ch.qos.logback.classic.boolex.JaninoEventEvaluator -->

? ? ? ? ? ? <expression>return message.contains("xinfo");</expression><!-- 布爾表達式 , 還有一種正則表達式的形式 -->

? ? ? ? </evaluator>

? ? ? ? <OnMatch>ACCEPT</OnMatch>

? ? ? ? <OnMismatch>DENY</OnMismatch>

? ? </filter>

</appender>

日志輸出格式詳細說明

參數(shù) 說明 示例

c{length}

lo{legnth}

logger{length}

輸出日志的logger , length縮短logger名 , 設置為0表示只輸入logger最右邊點符號之后內容(從右開始縮短 ,每個層級至少保留1位)

完整logger名 : cn.xbz.test.HelloController

%logger :?cn.xbz.test.HelloController

%logger{0}: HelloController

%logger{5}: c.x.t.HelloController

%logger{20}: c.x.test.HelloController


C{length}

class{length}

輸出當前調用者的全名(包名+類名) , 參數(shù)與上面一致 , 效率不高 , 盡量避免使用 %class

contextName

cn

輸出xml中配置的上下文名稱 %contextName

d{pattern}

date{pattern}

輸出當前的時間 , 字符串語法與SimpleDateFormat相同

%d : 2019-01-10 10:01:10,816

%date : 2019-01-10 10:01:10,816

%date{HH:mm:ss.SSS} :?10:01:10,816

%date{yyyy-MM-dd hh:mm:ss} :?2019-01-10 10:01:10?

F

file

輸出日志寫入目標的文件名 , 盡量避免使用 %file

caller{depth}

caller{depth, evaluator-1, ... evaluator-n}

當前調用者的位置信息 ?

L

line

輸出日期請求的行號 , 盡量避免使用 %line

m

msg

message

輸出日志信息(必用) %message

M

method

當前執(zhí)行日志請求的方法名 , 盡量避免使用 %method

n 輸出平臺相關的換行符("\n" 或 "\r\n") %n

p

le

level

輸出日志級別(TRACE/DEBUG/INFO/WARN/ERROR/FATAL) %level

r

relative

輸出自程序啟動到創(chuàng)建日志記錄的時間 , 單位毫秒 %relative

t

thread

輸出調用日志的線程名 %thread

replace(p){r,t} 替換輸出內容 , p為日志內容 , r是正則表達式 , 將p中符合r的內容替換為t %replace(%msg){'\s',''}

日志格式修飾符

可選的格式修飾符位于“%”和轉換符之間。(%-5level / %.6logger)

第一個可選修飾符是左對齊?標志散怖,符號是減號“-”肄渗;接著是可選的最小寬度?修飾符,用十進制數(shù)表示翎嫡。如果字符小于最小寬度,則左填充或右填充具伍,默認是左填充(即右對齊)圈驼,填充符為空格。如果字符大于最小寬度绩脆,字符永遠不會被截斷橄抹。最大寬度?修飾符惕味,符號是點號"."后面加十進制數(shù)。如果字符大于最大寬度名挥,則從前面截斷。點符號“.”后面加減號“-”在加數(shù)字榄融,表示從尾部截斷救湖。

例如:%-4relative 表示,將輸出從程序啟動到創(chuàng)建日志記錄的時間 進行左對齊 且最小寬度為4

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市憔维,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌业扒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹭沛,死亡現(xiàn)場離奇詭異章鲤,居然都是意外死亡,警方通過查閱死者的電腦和手機帚呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門皱蹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人沪哺,你說我怎么就攤上這事】萃荆” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵呆躲,是天一觀的道長。 經(jīng)常有香客問我插掂,道長腥例,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任璃弄,我火速辦了婚禮构回,結果婚禮上,老公的妹妹穿的比我還像新娘纤掸。我一直安慰自己,他們只是感情好借跪,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布掏愁。 她就那樣靜靜地躺著,像睡著了一般果港。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赦肃,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天公浪,我揣著相機與錄音,去河邊找鬼欠气。 笑死,一個胖子當著我的面吹牛队塘,可吹牛的內容都是我干的袁梗。 我是一名探鬼主播憔古,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸿市,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了焰情?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤合敦,失蹤者是張志新(化名)和其女友劉穎验游,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耕蝉,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了爪膊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸王。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谦铃,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情瘪菌,我是刑警寧澤嘹朗,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站屹培,受9級特大地震影響怔檩,放射性物質發(fā)生泄漏蓄诽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一乙埃、第九天 我趴在偏房一處隱蔽的房頂上張望调衰。 院中可真熱鬧膊爪,春花似錦嚎莉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至竹勉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間次乓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工城看, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杏慰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓轰胁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親软吐。 傳聞我的和親對象是個殘疾皇子吟税,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355