一、configuration
根節點:configuration,作為頂級標簽, 可以用來配置一些lockback的全局屬性,常見的屬性如下:
(1)scan=“true” :scan是否開啟自動掃描,監控配置文件更新,生效。
(2)scanPeriod=“60 seconds” :掃描的頻率
(3)debug=“false”:是否開啟logback的debug模式,注意這里和日志的debug無關,開啟后啟動之前會打印一些logback自身的信息。
二、property
1、作用:
property 標簽可以定義一些屬性變量,供其他配置地方通過${xxx}
使用。
springProperty 標簽可以獲取spring上下文里的屬性。
三、conversionRule
1、作用:
定義轉換器,可以用來對日志進行特殊的轉換,比如,SpringBoot后啟動項目控制臺默認會帶有彩色日志樣式,是因為使用了org.springframework.boot.logging.logback.ColorConverter
顏色轉換器,會把日志用AnsiOutput
進行輸出。如果自定義了logback,會覆蓋默認的配置。
conversionRule一般在property中引用
2、自定義conversionRule
demo:
import ch.qos.logback.classic.pattern.MessageConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;public class LogabckMessageConverter extends MessageConverter {@Overridepublic String convert(ILoggingEvent event) {String msg = event.getMessage();if ("ERROR".equals(event.getLevel().toString())) {msg = "系統異常";}return msg;}
}
<configuration><conversionRule conversionWord="mycon" converterClass="org.demo.annotation.convert.LogabckMessageConverter"/><!-- 格式化輸出:%date表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度 %msg:日志消息,%n是換行符--><property name="LOG_PATTERN"value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%t][%highlight(%p)][%green(%c).%M:%yellow(%L)] %ex{3}- %mycon %n"/><!-- 定義日志存儲的路徑,不要配置相對路徑 --><property name="FILE_PATH" value="usr/logs/demo.%d{yyyy-MM-dd}.%i.log" /><!-- 控制臺輸出日志 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><!-- 按照上面配置的LOG_PATTERN來打印日志 --><pattern>${LOG_PATTERN}</pattern></encoder></appender><!--每天生成一個日志文件,保存15天的日志文件。rollingFile是用來切分文件的 --><appender name="FILE"class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${FILE_PATH}</fileNamePattern><!-- keep 15 days' worth of history --><maxHistory>15</maxHistory><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- 日志文件的最大大小,超過這個大小重新生成一個文件 --><maxFileSize>1MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><pattern>${LOG_PATTERN}</pattern></encoder></appender><!-- project default level --><logger name="src" level="INFO" /><!-- 日志輸出級別 常用的日志級別按照從高到低依次為:ERROR、WARN、INFO、DEBUG。 --><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="FILE" /></root>
</configuration>
?測試:
@RequestMapping("/test")public String test(@Valid ParamDTO paramDTO) {log.info("paramDTO:{}", paramDTO);log.error ("出錯了paramDTO:{}", paramDTO);return codes;}
查看控制臺打印:
四、appender
1、作用:
<appender>是<configuration>的子節點,是負責寫日志的組件。Appender是logback中的最核心組件之一,寫日志渠道包括:控制臺、日志文件、網絡輸出等。<appender>有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名。
2、結構
借用一張官方的繼承體系圖:
途中可以看出常用的appender有三個:
2.1、ConsoleAppender
日志寫入到控制臺,底層會調用jdk的?System.out
?和?System.err。
有以下子節點:
<encoder>?: 對日志進行格式化。
<target> : 字符串?System.out?或者?System.err?,默認?System.out?;
<appender name="CONSOLE_OUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${CONSOLE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder>
</appender>
<!-- 表示打印到控制臺 --><appender name="limeFlogger" class="ch.qos.logback.core.ConsoleAppender"><!-- encoder 默認配置為PatternLayoutEncoder --> <encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder><target>System.err</target></appender>
?2.2、FileAppender
日志寫入到指定文件,有以下子節點:
<file> : 被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
<append> : 如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder> : 對記錄事件進行格式化。
<prudent> : 如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false。
immediateFlush:默認情況下true,每個日志事件都會立即刷新到文件輸出流中。這種方法更安全,因為如果應用程序退出時沒有正確關閉appender,則不會丟失日志記錄事件。但是,想顯著提高日志的吞吐量,可以將 limateFlush 屬性設置為 false。
<appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>testFile.log</file><append>true</append><immediateFlush>true</immediateFlush><encoder><pattern>${FILE_LOG_PATTERN}</pattern></encoder>
</appender>
2.3、RollingFileAppender
實際生產環境寫文件日志的首選appender,可以實現滾動式寫日志,在寫日志的過程中如果符合某些條件策略時,會重新寫入到新的文件,還可以將歷史日志進行歸檔、定期刪除等。解決了FileAppender方式會導致日志都在一個文件中,文件會越來越大,難以打開。常用屬性配置:
<file>?
被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
<append>
?如果是 true,日志被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder> : 對記錄事件進行格式化。
<rollingPolicy>?
當發生滾動時,決定?RollingFileAppender?的行為,涉及文件移動和重命名。常見的有:
①?TimeBasedRollingPolicy?
常用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責觸發滾動。有以下子節點:
<fileNamePattern> :?必要節點,包含文件名及“%d”轉換符,?“%d”可以包含一個Java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM}。如果直接使用 %d,默認格式是 yyyy-MM-dd。
RollingFileAppender?的file字節點可有可無,通過設置file,可以為活動文件和歸檔文件指定不同位置,當前日志總是記錄到file指定的文件(活動文件),活動文件的名字不會改變;如果沒設置file,活動文件的名字會根據fileNamePattern?的值,每隔一段時間改變一次。“/”或者“\”會被當做目錄分隔符。
<maxHistory> :?可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件。假設設置每個月滾動,且<maxHistory>是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創建的目錄也會被刪除。
②?FixedWindowRollingPolicy :?根據固定窗口算法重命名文件的滾動策略。有以下子節點:
<minIndex> : 窗口索引最小值。
<maxIndex> : 窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置為12。
<fileNamePattern?> :?必須包含“%i”例如,假設最小值和最大值分別為1和2,命名模式為 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有log%i.log.zip。
<triggeringPolicy>?
告知?RollingFileAppender?何時激活滾動。
<prudent> : 當為true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個限制,1、不支持也不允許文件壓縮,2、不能設置file屬性,必須留空。
<appender name="FILE_OUT" class="ch.qos.logback.core.rolling.RollingFileAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${FILE_LOG_PATTERN}</pattern><charset>UTF-8</charset></encoder><file>${LOG_FILE}</file><!-- 滾動日志策略: SizeAndTimeBasedRollingPolicy 根據文件大小和時間進行分割歸檔--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 指定滾動文件名稱的生成規則 --><fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><!-- 超過最大磁盤限制后是否刪除歸檔文件 --><cleanHistoryOnStart>true</cleanHistoryOnStart><!-- 單個日志文件大小 --><maxFileSize>20MB</maxFileSize><!-- 歸檔文件占用磁盤總大小,超過后會根據cleanHistoryOnStart實行,決定是否刪除 --><totalSizeCap>1GB</totalSizeCap><!-- 保留的歷史歸檔日志文件個數 --><maxHistory>10</maxHistory></rollingPolicy>
</appender>
2.4、AsyncAppender
異步寫日志,本身不做真是的日志寫入,需要配置包裹其它appender,在于高并發下,加如日志隊列緩存,減少寫磁盤日志的IO次數。可以根據實際情況決定是否使用 。
2.5、不常用的appender
SocketAppender 寫入socket、SMTPAppender 寫入郵件、DBAppender 寫入數據庫
五、encoder
1、作用
節點<appender>的子節點<encoder>,<encoder> ?負責兩件事,一是把日志信息轉換成字節數組,二是把字節數組寫入到輸出流。
Encoder在0.9.19中引入,作用負責將日志事件轉換為字節數組,并將字節數組輸出到輸出流中(具體的appender輸出流)。在此之前的版本主要使用Layout,Layout只能將日志事件轉換為String。Layout還無法控制何時寫出日志,因此Layout無法對日志事件進行批量控制,相比之下,Encoder不僅可以完全控制寫出的字節的格式,而且還可以控制何時(以及是否)寫出這些字節內容。
目前PatternLayoutEncoder?是唯一有用的且默認的encoder?,有一個<pattern>節點,用來設置日志的輸入格式。使用“%”加“轉換符”方式,如果要輸出“%”,則必須用“\”對“\%”進行轉義。
最常用的編碼器,通常指定:編碼和日志打印規則
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %-40.40logger{39} %-4line : %m%n%wEx</pattern><charset>UTF-8</charset>
</encoder>
<pattern>里面的轉換符說明:?‘
轉換符 | 作用 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
c?{length?}? lo?{length?}? logger?{length?}? | 輸出日志的logger名,可有一個整形參數,功能是縮短logger名,設置為0表示只輸入logger最右邊點符號之后的字符串。
| ||||||||||||||||||||||||
C?{length?}? class?{length?}? | 輸出執行記錄請求的調用者的全限定名。參數與上面的一樣。盡量避免使用,除非執行速度不造成任何問題。 | ||||||||||||||||||||||||
contextName? cn? | 輸出上下文名稱。 | ||||||||||||||||||||||||
d?{pattern?}? date?{pattern?}? | 輸出日志的打印日志,模式語法與java.text.SimpleDateFormat ?兼容。
| ||||||||||||||||||||||||
F 或 file | 輸出執行記錄請求的java源文件名。盡量避免使用,除非執行速度不造成任何問題。 | ||||||||||||||||||||||||
caller{depth}caller{depth, evaluator-1, ... evaluator-n} | 輸出生成日志的調用者的位置信息,整數選項表示輸出信息深度。 例如,?%caller{2}?? 輸出為: 0 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17) 例如,?%caller{3}?? 輸出為: 16 [main] DEBUG - logging statement Caller+0 at mainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22) Caller+1 at mainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17) Caller+2 at mainPackage.ConfigTester.main(ConfigTester.java:38) | ||||||||||||||||||||||||
L 或 line | 輸出執行日志請求的行號。盡量避免使用,除非執行速度不造成任何問題。 | ||||||||||||||||||||||||
m 或msg 或 message | 輸出應用程序提供的信息。 | ||||||||||||||||||||||||
M 或者method | 輸出執行日志請求的方法名。盡量避免使用,除非執行速度不造成任何問題。 | ||||||||||||||||||||||||
n | 輸出平臺先關的分行符“\n”或者“\r\n”。 | ||||||||||||||||||||||||
p 或者 le 或者 level | 輸出日志級別。 | ||||||||||||||||||||||||
r 或者 relative | 輸出從程序啟動到創建日志記錄的時間,單位是毫秒 | ||||||||||||||||||||||||
t 或者thread | 輸出產生日志的線程名。 | ||||||||||||||||||||||||
replace(p?){r, t} | p?為日志內容,r?是正則表達式,將p?中符合r?的內容替換為t?。 例如, "%replace(%msg){'\s', ''}" |
格式修飾符,與轉換符共同使用:
可選的格式修飾符位于“%”和轉換符之間。
第一個可選修飾符是左對齊?標志,符號是減號“-”;接著是可選的最小寬度?修飾符,用十進制數表示。如果字符小于最小寬度,則左填充或右填充,默認是左填充(即右對齊),填充符為空格。如果字符大于最小寬度,字符永遠不會被截斷。最大寬度?修飾符,符號是點號"."后面加十進制數。如果字符大于最大寬度,則從前面截斷。點符號“.”后面加減號“-”在加數字,表示從尾部截斷。
例如:%-4relative 表示,將輸出從程序啟動到創建日志記錄的時間 進行左對齊 且最小寬度為4。
六、Layout
layout根據pattern規則,將日志事件轉換為具體的日志字符串,我們配置的各種日志打印格式,都是由layout解析翻譯成字符串。由于官方規則太多,我們以一個具體的例介紹一些常用的規則符號:
七、Filters
1、作用
過濾器,執行一個過濾器會有返回個枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日志將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列表里的下個過濾器過接著處理日志;返回ACCEPT,日志會被立即處理,不再經過剩余過濾器。
過濾器被添加到<appender>?中,為<appender>?添加一個或多個過濾器后,可以用任意條件對日志進行過濾。<appender>?有多個過濾器時,按照配置順序執行。
2、常用的過濾器?
(1)LevelFilter?
級別過濾器,根據日志級別進行過濾。如果日志級別等于配置級別,過濾器會根據 onMath 和 onMismatch 接收或拒絕日志。
有以下子節點 :?
<level> : 設置過濾級別。
<onMatch> : 用于配置符合過濾條件的操作。
<onMismatch> : 用于配置不符合過濾條件的操作。
例如:將過濾器的日志級別配置為info,所有info級別的日志交給appender處理,非info級別的日志,被過濾掉。
(2)ThresholdFilter?
?臨界值過濾器,過濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時,過濾器返回NEUTRAL;當日志級別低于臨界值時,日志會被拒絕。
有以下子節點 :?
<level> : 設置過濾級別。
例如:過濾掉所有低于info級別的日志。
(3)EvaluatorFilter?
求值過濾器,評估、鑒別日志是否符合指定條件。
有以下子節點:
<evaluator> :?鑒別器,常用的鑒別器是JaninoEventEvaluato,也是默認的鑒別器,它以任意的Java布爾值表達式作為求值條件,求值條件在配置文件解釋過成功被動態編譯,布爾值表達式返回true就表示符合過濾條件。
evaluator有個子標簽<expression>,用于配置求值條件。
求值表達式作用于當前日志,logback向求值表達式暴露日志的各種字段:
Name | Type | Description |
---|---|---|
event | LoggingEvent | 與記錄請求相關聯的原始記錄事件,下面所有變量都來自event,例如,event.getMessage()返回下面"message"相同的字符串 |
message | String | 日志的原始消息,例如,設有logger mylogger,"name"的值是"AUB",對于 mylogger.info("Hello {}",name); "Hello {}"就是原始消息。 |
formatedMessage | String | 日志被各式化的消息,例如,設有logger mylogger,"name"的值是"AUB",對于 mylogger.info("Hello {}",name); "Hello Aub"就是格式化后的消息。 |
logger | String | logger 名。 |
loggerContext | LoggerContextVO | 日志所屬的logger上下文。 |
level | int | 級別對應的整數值,所以?level > INFO?是正確的表達式。 |
timeStamp | long | 創建日志的時間戳。 |
marker | Marker | 與日志請求相關聯的Marker對象,注意“Marker”有可能為null,所以你要確保它不能是null。 |
mdc | Map | 包含創建日志期間的MDC所有值得map。訪問方法是:mdc.get("myKey")?。mdc.get()返回的是Object不是String,要想調用String的方法就要強轉,例如,
|
throwable | java.lang.Throwable | 如果沒有異常與日志關聯"throwable" 變量為 null. 不幸的是, "throwable" 不能被序列化。在遠程系統上永遠為null,對于與位置無關的表達式請使用下面的變量throwableProxy |
throwableProxy | IThrowableProxy | 與日志事件關聯的異常代理。如果沒有異常與日志事件關聯,則變量"throwableProxy" 為 null. 當異常被關聯到日志事件時,"throwableProxy" 在遠程系統上不會為null |
<onMatch>:用于配置符合過濾條件的操作
<onMismatch>:用于配置不符合過濾條件的操作
例如:過濾掉所有日志消息中不包含“billing”字符串的日志。
<matcher> :?
匹配器,盡管可以使用String類的matches()方法進行模式匹配,但會導致每次調用過濾器時都會創建一個新的Pattern對象,為了消除這種開銷,可以預定義一個或多個matcher對象,定以后就可以在求值表達式中重復引用。<matcher>是<evaluator>的子標簽。
<matcher>中包含兩個子標簽,一個是<name>,用于定義matcher的名字,求值表達式中使用這個名字來引用matcher;另一個是<regex>,用于配置匹配條件。
filter 日志過濾器,
logback 的內置 filter 有一下幾種:
級別過濾器 ch.qos.logback.classic.filter.LevelFilter。對指定級別的日志進行具體的操作
閥值過濾器 ch.qos.logback.classic.filter.ThresholdFilter。
表達式過濾器 ch.qos.logback.core.filter.EvaluatorFilter。
Groovy的表達式 ch.qos.logback.classic.boolex.GEventEvaluator。
Java的表達式ch.qos.logback.classic.boolex.JaninoEventEvaluator。使用 Janino 解析java script。
包含標記 ch.qos.logback.classic.boolex.OnMarkerEvaluator
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 過濾的級別 --><level>INFO</level><!-- 匹配時的操作:接收(記錄) --><onMatch>ACCEPT</onMatch><!-- 不匹配時的操作:拒絕(不記錄) --><onMismatch>DENY</onMismatch>
</filter>
八、root
<root level="WARN"><appender-ref ref="FILE"/><appender-ref ref="ERROR"/><if condition='property("env").contains("local")'><then><!-- this only enable in local --><appender-ref ref="CONSOLE"/></then></if></root>
?1、定義日志文件的存儲地址
<!-- 應用名稱 --><property name="APP_NAME" value="log-test"/><!--定義日志文件的存儲地址--><property name="LOG_HOME" value="/logs/${APP_NAME}"/>
2、定義日志格式?
(1)普通格式
<!-- 定義日志格式 --><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
參數 | 含義 |
---|---|
%d | 表示日期(也可以使用"%date") |
%-5level | 表示級別從左顯示5個字符寬度 |
%thread | 表示線程名稱 |
%-30.30logger{30} | 表示如果logger的名稱小于30,就“-”指定左對齊;如果其名稱長于30字符,就從左邊較遠輸出的字符截掉,保持logger的名字長度最終限制為30個字符 |
%msg | 表示日志消息 |
%n | 表示換行符 |
(2)高亮
<!-- 高亮日志格式 --><property name="HIGHLIGHT_PATTERN" value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
參數 | 含義 |
---|---|
%yellow()%green(%highlight() | 顏色高亮 |
%d | 表示日期(也可以使用"%date") |
%-5level | 表示級別從左顯示5個字符寬度 |
%thread | 表示線程名稱 |
%-30.30logger{30} | 表示如果logger的名稱小于30,就“-”指定左對齊;如果其名稱長于30字符,就從左邊較遠輸出的字符截掉,保持logger的名字長度最終限制為30個字符 |
%msg | 表示日志消息 |
%n | 表示換行符 |
3、定義日志的輸出級別
<!-- 日志輸出級別 --><logger name="org.springframework" level="INFO"/><logger name="com.wtyy.*" level="INFO"/><root level="INFO"><appender-ref ref="CONSOLE-WITH-HIGHLIGHT"/><appender-ref ref="FILE"/></root>
(1)?標簽:logger
僅有一個name屬性,一個可選的level和一個可選的additivity屬性
屬性name: 用來指定受此logger約束的某一個包或者具體的某一個類。
屬性level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。 如果未設置此屬性,那么當前logger將會繼承上級的級別
屬性additivity: 是否向上級logger傳遞打印信息。默認是true。同一樣,可以包含零個或多個元素,標識這個appender將會添加到這個logger
(2)標簽:root
root也是logger元素,但是它是根loger并且只有一個level屬性,可以包含零個或多個元素,標識這個appender將會添加到這個loger
level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置為INHERITED或者同義詞NULL。默認是DEBUG。
trace(跟蹤):一般用來追蹤詳細的程序運行流,比如程序的運行過程中,運行到了哪一個方法,進入了哪一條分支。通過 trace程序的運行流程,可以判斷程序是否按照期望的邏輯在運行
debug(調試 ):這類日志往往用在判斷是否有出現bug的場景,且往往記錄了代碼運行的詳細信息,比如方法調用傳入的參數信息
info(消息):用來記錄程序運行的一些關鍵信息,它不像trace那樣記錄程序運行的整個流程,也不像debug那樣為了解決問題而記錄詳細的信息。info記錄的是整個系統的運行信息,比如系統運行到了哪一個階段,到達了哪一個狀態
warn(警告):用來記錄一些警告信息。警告信息表示,程序進入了一個特殊的狀態,在該狀態下程序可以繼續運行,但是不建議讓程序進入該狀態,因為該狀態可能導致結果出現問題
error(錯誤):用來記錄運行時的錯誤信息,表示程序運行過程中出現了需要被解決的問題,往往是一些異常。使用error日志的時候,一般會將詳細的異常出現的原因記錄
日志優先級從高到低依次為trace、debug、info、warn、error。相對而言,打印的日志會越來越少。
4、定義控制臺輸出
<!-- 控制臺輸出-高亮 --><appender name="CONSOLE-WITH-HIGHLIGHT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${HIGHLIGHT_PATTERN}</pattern></encoder></appender>
標簽 | 含義 |
---|---|
appender | 負責寫日志的組件,它有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名 |
encoder | 對日志進行格式化 |
pattern | 用來設置日志的輸入格式。使用“%”加“轉換符”方式,如果要輸出“%”,則必須用“\”對“%”進行轉義 |
5、?定義日志文件輸出參數?
<!--文件輸出的格式設置 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false --><prudent>false</prudent><!-- 日志日常打印日志文件,生成日志示例:/logs/log-test/info.log --><file>${LOG_HOME}/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 壓縮日志的路徑和日志格式,示例:info-2023-05-26_21.log.zip,%d{yyyy-MM-dd}:表示文件名稱包含日期,%i:表示當前是第幾個壓縮文件 --><fileNamePattern>${LOG_HOME}/info-%d{yyyy-MM-dd}_%i.log.zip</fileNamePattern><!-- 如果按天來回滾,則最大保存時間為7天,7天之前的都將被清理掉 --><maxHistory>7</maxHistory><!-- 日志總保存量為10GB,超過該日志總量的日志壓縮包會被清除 --><totalSizeCap>10GB</totalSizeCap><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!--文件達到 最大100MB時會被壓縮和切割 --><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><!-- 文件輸出的日志 的格式 --><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder></appender>