http://logback.qos.ch/manual/layouts.htmlPatternLayout
轉(zhuǎn)換模式類似于C語(yǔ)言里的printf()。
轉(zhuǎn)移字符:
c{length}
lo{length}
logger{length}
其中的length代表輸出的logger長(zhǎng)度。
設(shè)為0的話例外,僅輸出最右邊的logger名。
其余情況會(huì)自動(dòng)計(jì)算,盡量使得輸出的總字符串長(zhǎng)度小于指定長(zhǎng)度——但是,最右邊的logger名稱無(wú)論如何會(huì)完整保留,同時(shí)前面的每一級(jí)logger,最少會(huì)被精簡(jiǎn)到1個(gè)字符。
——%c{1}
C{length}
class{length}
打印調(diào)用者的類名稱,設(shè)置方法與上面一樣。
性能不高。
contextName
cn
打印logger在event最初綁定的logger context的名稱。
d{pattern}
date{pattern}
d{pattern, timezone}
date{pattern, timezone}
輸入日志時(shí)間,使用java.text.SimpleDateFormat的日期格式化方法。
如果不指定日期格式,默認(rèn)使用ISO8601,也就是2006-10-20 14:06:49,812這種形式。
——%d
F / file
輸出java源文件的名稱。
性能不高。
caller{depth}
caller{depth, evaluator-1, ... evaluator-n}
打印日志事件的調(diào)用堆棧。
使用評(píng)估器evaluator決定是否打印。
L
line
輸出日志記錄請(qǐng)求發(fā)起的行數(shù)。
性能不高。
m
msg
message
日志正文
——%m
M
method
日志調(diào)用方法名。
性能不高
n
操作系統(tǒng)對(duì)應(yīng)的換行符
——%n
p
le
level
日志等級(jí)
r
relative
應(yīng)用程序啟動(dòng)到日志創(chuàng)建的相對(duì)時(shí)間
t
thread
線程名
——%t
X{key:-defaultVal}
mdc{key:-defaultVal}
MDC信息
ex{depth}
exception{depth}
throwable{depth}
ex{depth, evaluator-1, ..., evaluator-n}
exception{depth, evaluator-1, ..., evaluator-n}
throwable{depth, evaluator-1, ..., evaluator-n}
輸出異常堆棧深度(如果有的話),默認(rèn)full全部輸出。
可以指定的參數(shù)值:
short:打印堆棧的第一行
full:打印所有行
任何數(shù)字:指定行數(shù)
使用評(píng)估器evaluator決定是否打印。
xEx{depth}
xException{depth}
xThrowable{depth}
xEx{depth, evaluator-1, ..., evaluator-n}
xException{depth, evaluator-1, ..., evaluator-n}
xThrowable{depth, evaluator-1, ..., evaluator-n}
跟上面的類似,但是附加了包信息。
如果包信息不準(zhǔn)確(是猜測(cè)的),那么會(huì)自動(dòng)在包信息前面附加一個(gè)“~”字符。
如果在日志信息模式里,未指定任何異常格式,那么系統(tǒng)會(huì)自動(dòng)在末尾加上一個(gè)%xEx。
如果不想打印包信息(例如netbean里會(huì)出問(wèn)題),那么在日志模式的末尾明確指定%ex即可,就會(huì)輸出不包含包信息的堆棧。
如果想不打印任何異常堆棧信息,可以使用%nopex。
——%xEx
nopex
nopexception
加上%nopex可以阻止系統(tǒng)自動(dòng)在日志模式末尾添加%xEx——也就是完全禁止異常堆棧打印。
marker
輸出關(guān)聯(lián)的marker信息,如果marker多級(jí)關(guān)聯(lián),會(huì)都打印出來(lái)。
property{key}
輸出key關(guān)聯(lián)的屬性——定義在logger context或者system properties里面。
replace(p){r, t}
將p中的所有符合r正則的字符串,都替換成t。
例如%replace(%logger%msg){'\.', '/'},會(huì)將輸出的logger和msg信息中的點(diǎn)號(hào)都替換成斜杠。
rEx{depth}
rootException{depth}
rEx{depth, evaluator-1, ..., evaluator-n}
rootException{depth, evaluator-1, ..., evaluator-n}
類似于xEx,也會(huì)打印異常的包信息,但是會(huì)將root exception打印到前面,跟普通的異常打印順序是反著的。
轉(zhuǎn)義百分號(hào): \%
正常情況下轉(zhuǎn)義字符會(huì)被正確分割,但有些時(shí)候例外,例如%date%nHello,系統(tǒng)會(huì)解析%nHello失敗。如果真的需要在%n后緊跟一個(gè)Hello,可以這樣:%date%n{}Hello
我一般用這個(gè):
%d [%t] %-5p %c{1} - %m%n
------------------------------------------------------------------
Format modifiers
控制數(shù)據(jù)段的補(bǔ)齊。
例如 %20.30logger
如果logger長(zhǎng)度小于20,則從左邊用空格補(bǔ)齊;如果logger長(zhǎng)度大于30,則從開(kāi)頭(左邊)切去多余字符。
如果20或者30前面有負(fù)號(hào),則左右顛倒。
假如想給日志級(jí)別只輸出1個(gè)字符(T,D,W,I,E),不需要自己寫一個(gè)Converter,而只需要配置一下即可:%.-1level
轉(zhuǎn)義選項(xiàng):
如果轉(zhuǎn)義選項(xiàng)里面包含特殊字符(特別是在使用正則表達(dá)式的時(shí)候),例如大小括號(hào)、逗號(hào)、空格,那么可以用單引號(hào)或雙引號(hào)括起來(lái),例如:
<pattern>%-5level - %replace(%msg){'\d{14,16}', 'XXXX'}%n</pattern>
——這個(gè)可以把14到16位的數(shù)字(信用卡號(hào))轉(zhuǎn)換為XXXX。
------------------------------------------------------------------
括號(hào)的特殊作用:
%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{32} - %msg%n
可以讓括號(hào)里的兩個(gè)表達(dá)式聯(lián)合起來(lái)按照30個(gè)字符補(bǔ)齊。
括號(hào)可以用反斜杠轉(zhuǎn)義:\(%d{HH:mm:ss.SSS} [%thread]\)
------------------------------------------------------------------
Coloring
著色,window需要引其它包,linux和mac os本身支持著色。
樣例:<pattern>[%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n</pattern>
%highlight會(huì)將ERROR設(shè)為紅色加粗,WARN設(shè)為紅色,INFO設(shè)為藍(lán)色,其余默認(rèn)。
%cyan會(huì)將logger名稱設(shè)為藍(lán)綠色。
------------------------------------------------------------------
Evaluators
EventEvaluator類的實(shí)現(xiàn),用來(lái)評(píng)估一個(gè)事件是否符合打印條件。
<evaluator name="DISP_CALLER_EVAL">
<expression>logger.contains("chapters.layouts") && \
message.contains("who calls thee")</expression>
</evaluator>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%-4relative [%thread] %-5level - %msg%n%caller{2, DISP_CALLER_EVAL}
</pattern>
</encoder>
</appender>
注意因?yàn)閤ml的關(guān)系,要用&轉(zhuǎn)義&
應(yīng)用場(chǎng)景:
例如,如果日志級(jí)別是WARN以上,并且logger是來(lái)自一個(gè)財(cái)務(wù)模塊——那么就打印caller信息。
注意:
在%caller轉(zhuǎn)義模式中,當(dāng)Evaluators返回true的時(shí)候才輸出。
在%ex轉(zhuǎn)義模式中,當(dāng)Evaluatorstrue的時(shí)候不輸出。
例如下面的配置,當(dāng)異常對(duì)象為TestException時(shí),不輸出。
<evaluator name="DISPLAY_EX_EVAL">
<expression>throwable != null && throwable instanceof \
chapters.layouts.TestException</expression>
</evaluator>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg%n%ex{full, DISPLAY_EX_EVAL}</pattern>
</encoder>
</appender>
------------------------------------------------------------------
Creating a custom conversion specifier
略
------------------------------------------------------------------
HTMLLayout
使用html表格來(lái)布局日志信息。
可以使用普通的pattern轉(zhuǎn)義符,但轉(zhuǎn)義字符之前,不許用包括空格在內(nèi)的任何字符分隔。
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%relative%thread%mdc%level%logger%msg</pattern>
</layout>
</encoder>
<file>test.html</file>
</appender>
HTMLLayout會(huì)自動(dòng)創(chuàng)建一個(gè)DefaultThrowableRenderer,將異常信息打印到完整的一行里。如果不想這樣,可以指定一個(gè)NOPThrowableRenderer。
用CSS指定表格的樣式:略
該Layout最常見(jiàn)的用法是配合SMTPAppender,發(fā)送html格式的日志郵件。
------------------------------------------------------------------
Logback access
略