logback

一:根節(jié)點(diǎn)包含的屬性:

scan:

當(dāng)此屬性設(shè)置為true時(shí)磷杏,配置文件如果發(fā)生改變,將會(huì)被重新加載募闲,默認(rèn)值為true献宫。

scanPeriod:

設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒有給出時(shí)間單位糠惫,默認(rèn)單位是毫秒疫剃。當(dāng)scan為true時(shí),此屬性生效硼讽。默認(rèn)的時(shí)間間隔為1分鐘巢价。

debug:

當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)壤躲。默認(rèn)值為false城菊。

例如:

Xml代碼


二:根節(jié)點(diǎn)的子節(jié)點(diǎn):

2.1設(shè)置上下文名稱:

每個(gè)logger都關(guān)聯(lián)到logger上下文,默認(rèn)上下文名稱為“default”碉克。但可以使用設(shè)置成其他名字凌唬,用于區(qū)分不同應(yīng)用程序的記錄。一旦設(shè)置漏麦,不能修改客税。

Xml代碼

myAppName


2.2設(shè)置變量:

用來定義變量值的標(biāo)簽, 有兩個(gè)屬性撕贞,name和value更耻;其中name的值是變量的名稱,value的值時(shí)變量定義的值捏膨。通過定義的值會(huì)被插入到logger上下文中秧均。定義變量后,可以使“${}”來使用變量号涯。

例如使用定義上下文名稱目胡,然后在設(shè)置logger上下文時(shí)使用。

Xml代碼

${APP_Name}


2.3獲取時(shí)間戳字符串:

兩個(gè)屬性 key:標(biāo)識(shí)此的名字诚隙;datePattern:設(shè)置將當(dāng)前時(shí)間(解析配置文件的時(shí)間)轉(zhuǎn)換為字符串的模式讶隐,遵循java.txt.SimpleDateFormat的格式。

例如將解析配置文件的時(shí)間作為上下文名稱:

Xml代碼

${bySecond}


2.4設(shè)置loger:

用來設(shè)置某一個(gè)包或者具體的某一個(gè)類的日志打印級(jí)別久又、以及指定。僅有一個(gè)name屬性效五,一個(gè)可選的level和一個(gè)可選的addtivity屬性地消。

name:

用來指定受此loger約束的某一個(gè)包或者具體的某一個(gè)類。

level:

用來設(shè)置打印級(jí)別畏妖,大小寫無關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF脉执,還有一個(gè)特俗值INHERITED或者同義詞NULL,代表強(qiáng)制執(zhí)行上級(jí)的級(jí)別戒劫。

如果未設(shè)置此屬性半夷,那么當(dāng)前l(fā)oger將會(huì)繼承上級(jí)的級(jí)別。

addtivity:

是否向上級(jí)loger傳遞打印信息迅细。默認(rèn)是true巫橄。

可以包含零個(gè)或多個(gè)元素,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)loger茵典。

也是元素湘换,但是它是根loger。只有一個(gè)level屬性,應(yīng)為已經(jīng)被命名為"root".

level:

用來設(shè)置打印級(jí)別筹我,大小寫無關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF蔬蕊,不能設(shè)置為INHERITED或者同義詞NULL岸夯。

默認(rèn)是DEBUG。

可以包含零個(gè)或多個(gè)元素破镰,標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)loger。

例如:

LogbackDemo.java類

Java代碼

packagelogback;

importorg.slf4j.Logger;

importorg.slf4j.LoggerFactory;

publicclassLogbackDemo {

privatestaticLogger log = LoggerFactory.getLogger(LogbackDemo.class);

publicstaticvoidmain(String[] args) {

log.trace("======trace");

log.debug("======debug");

log.info("======info");

log.warn("======warn");

log.error("======error");

}

}

logback.xml配置文件

第1種:只配置root

Xml代碼


%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

其中appender的配置表示打印到控制臺(tái)(稍后詳細(xì)講解appender);

將root的打印級(jí)別設(shè)置為“INFO”喉祭,指定了名字為“STDOUT”的appender。

當(dāng)執(zhí)行l(wèi)ogback.LogbackDemo類的main方法時(shí)蔽氨,root將級(jí)別為“INFO”及大于“INFO”的日志信息交給已經(jīng)配置好的名為“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制臺(tái);

打印結(jié)果如下:

Xml代碼

13:30:38.484 [main] INFO? logback.LogbackDemo-======info

13:30:38.500 [main] WARN? logback.LogbackDemo-======warn

13:30:38.500 [main] ERROR logback.LogbackDemo-======error

第2種:帶有l(wèi)oger的配置匿级,不指定級(jí)別津函,不指定appender,

Xml代碼


%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n


其中appender的配置表示打印到控制臺(tái)(稍后詳細(xì)講解appender);

將控制logback包下的所有類的日志的打印稠项,但是并沒用設(shè)置打印級(jí)別,所以繼承他的上級(jí)的日志級(jí)別“DEBUG”;

沒有設(shè)置addtivity埂软,默認(rèn)為true,將此loger的打印信息向上級(jí)傳遞咖杂;

沒有設(shè)置appender懦尝,此loger本身不打印任何信息琅轧。

將root的打印級(jí)別設(shè)置為“DEBUG”冲杀,指定了名字為“STDOUT”的appender。

當(dāng)執(zhí)行l(wèi)ogback.LogbackDemo類的main方法時(shí)旺芽,因?yàn)長(zhǎng)ogbackDemo 在包logback中,所以首先執(zhí)行,將級(jí)別為“DEBUG”及大于“DEBUG”的日志信息傳遞給root,本身并不打颖愎蟆蚌本;

root接到下級(jí)傳遞的信息舷嗡,交給已經(jīng)配置好的名為“STDOUT”的appender處理,“STDOUT”appender將信息打印到控制臺(tái);

打印結(jié)果如下:

Xml代碼

13:19:15.406 [main] DEBUG logback.LogbackDemo-======debug

13:19:15.406 [main] INFO? logback.LogbackDemo-======info

13:19:15.406 [main] WARN? logback.LogbackDemo-======warn

13:19:15.406 [main] ERROR logback.LogbackDemo-======error

第3種:帶有多個(gè)loger的配置,指定級(jí)別惫搏,指定appender

Xml代碼


%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n



其中appender的配置表示打印到控制臺(tái)(稍后詳細(xì)講解appender);

將控制logback包下的所有類的日志的打印,但是并沒用設(shè)置打印級(jí)別,所以繼承他的上級(jí)的日志級(jí)別“DEBUG”们何;

沒有設(shè)置addtivity茬射,默認(rèn)為true钟病,將此loger的打印信息向上級(jí)傳遞朴读;

沒有設(shè)置appender,此loger本身不打印任何信息。

控制logback.LogbackDemo類的日志打印授滓,打印級(jí)別為“INFO”诚啃;

additivity屬性為false仔燕,表示此loger的打印信息不再向上級(jí)傳遞,

指定了名字為“STDOUT”的appender鳞疲。

將root的打印級(jí)別設(shè)置為“ERROR”,指定了名字為“STDOUT”的appender拴曲。

當(dāng)執(zhí)行l(wèi)ogback.LogbackDemo類的main方法時(shí)叁熔,先執(zhí)行,將級(jí)別為“INFO”及大于“INFO”的日志信息交給此loger指定的名為“STDOUT”的appender處理著蛙,在控制臺(tái)中打出日志,不再向次loger的上級(jí) 傳遞打印信息挤渔;

未接到任何打印信息,當(dāng)然也不會(huì)給它的上級(jí)root傳遞任何打印信息判导;

打印結(jié)果如下:

Xml代碼

14:05:35.937 [main] INFO? logback.LogbackDemo-======info

14:05:35.937 [main] WARN? logback.LogbackDemo-======warn

14:05:35.937 [main] ERROR logback.LogbackDemo-======error

如果將修改為 那打印結(jié)果將是什么呢嫉父?

沒錯(cuò),日志打印了兩次眼刃,想必大家都知道原因了绕辖,因?yàn)榇蛴⌒畔⑾蛏霞?jí)傳遞,logger本身打印一次擂红,root接到后又打印一次

打印結(jié)果如下:

Xml代碼

14:09:01.531 [main] INFO? logback.LogbackDemo-======info

14:09:01.531 [main] INFO? logback.LogbackDemo-======info

14:09:01.531 [main] WARN? logback.LogbackDemo-======warn

14:09:01.531 [main] WARN? logback.LogbackDemo-======warn

14:09:01.531 [main] ERROR logback.LogbackDemo-======error

14:09:01.531 [main] ERROR logback.LogbackDemo-======error

***********************************************詳解>******************************************

是的子節(jié)點(diǎn)仪际,是負(fù)責(zé)寫日志的組件。

有兩個(gè)必要屬性name和class昵骤。name指定appender名稱树碱,class指定appender的全限定名。

1.ConsoleAppender:

把日志添加到控制臺(tái)变秦,有以下子節(jié)點(diǎn):

:對(duì)日志進(jìn)行格式化成榜。(具體參數(shù)稍后講解)

:字符串System.out或者System.err,默認(rèn)System.out蹦玫;

例如:

Xml代碼

%-4relative [%thread] %-5level %logger{35} - %msg %n

2.FileAppender:

把日志添加到文件赎婚,有以下子節(jié)點(diǎn):

:被寫入的文件名,可以是相對(duì)目錄樱溉,也可以是絕對(duì)目錄挣输,如果上級(jí)目錄不存在會(huì)自動(dòng)創(chuàng)建,沒有默認(rèn)值福贞。

:如果是 true撩嚼,日志被追加到文件結(jié)尾,如果是 false,清空現(xiàn)存文件绢馍,默認(rèn)是true向瓷。

:對(duì)記錄事件進(jìn)行格式化。(具體參數(shù)稍后講解)

:如果是 true舰涌,日志會(huì)被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作你稚,效率低瓷耙,默認(rèn)是 false。

例如:

Xml代碼

testFile.log

true

%-4relative [%thread] %-5level %logger{35} - %msg%n

3.RollingFileAppender:

滾動(dòng)記錄文件刁赖,先將日志記錄到指定文件搁痛,當(dāng)符合某個(gè)條件時(shí),將日志記錄到其他文件宇弛。有以下子節(jié)點(diǎn):

:被寫入的文件名鸡典,可以是相對(duì)目錄,也可以是絕對(duì)目錄枪芒,如果上級(jí)目錄不存在會(huì)自動(dòng)創(chuàng)建彻况,沒有默認(rèn)值。

:如果是 true舅踪,日志被追加到文件結(jié)尾纽甘,如果是 false,清空現(xiàn)存文件抽碌,默認(rèn)是true悍赢。

:對(duì)記錄事件進(jìn)行格式化。(具體參數(shù)稍后講解)

:當(dāng)發(fā)生滾動(dòng)時(shí)货徙,決定RollingFileAppender的行為左权,涉及文件移動(dòng)和重命名。

>:告知RollingFileAppender合適激活滾動(dòng)痴颊。

:當(dāng)為true時(shí)赏迟,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy祷舀,但是有兩個(gè)限制瀑梗,1不支持也不允許文件壓縮,2不能設(shè)置file屬性裳扯,必須留空抛丽。

rollingPolicy:

TimeBasedRollingPolicy:最常用的滾動(dòng)策略,它根據(jù)時(shí)間來制定滾動(dòng)策略饰豺,既負(fù)責(zé)滾動(dòng)也負(fù)責(zé)出發(fā)滾動(dòng)亿鲜。有以下子節(jié)點(diǎn):

:

必要節(jié)點(diǎn),包含文件名及“%d”轉(zhuǎn)換符,“%d”可以包含一個(gè)java.text.SimpleDateFormat指定的時(shí)間格式蒿柳,如:%d{yyyy-MM}饶套。如果直接使用 %d,默認(rèn)格式是 yyyy-MM-dd垒探。RollingFileAppender的file字節(jié)點(diǎn)可有可無妓蛮,通過設(shè)置file,可以為活動(dòng)文件和歸檔文件指定不同位置圾叼,當(dāng)前日志總是記錄到file指定的文件(活動(dòng)文件)蛤克,活動(dòng)文件的名字不會(huì)改變;如果沒設(shè)置file夷蚊,活動(dòng)文件的名字會(huì)根據(jù)fileNamePattern的值构挤,每隔一段時(shí)間改變一次√韫模“/”或者“\”會(huì)被當(dāng)做目錄分隔符筋现。

:

可選節(jié)點(diǎn),控制保留的歸檔文件的最大數(shù)量箱歧,超出數(shù)量就刪除舊文件矾飞。假設(shè)設(shè)置每個(gè)月滾動(dòng),且是6叫胁,則只保存最近6個(gè)月的文件凰慈,刪除之前的舊文件。注意驼鹅,刪除舊文件是微谓,那些為了歸檔而創(chuàng)建的目錄也會(huì)被刪除。

FixedWindowRollingPolicy:根據(jù)固定窗口算法重命名文件的滾動(dòng)策略输钩。有以下子節(jié)點(diǎn):

:窗口索引最小值

:窗口索引最大值豺型,當(dāng)用戶指定的窗口過大時(shí),會(huì)自動(dòng)將窗口設(shè)置為12买乃。

:

必須包含“%i”例如姻氨,假設(shè)最小值和最大值分別為1和2,命名模式為 mylog%i.log,會(huì)產(chǎn)生歸檔文件mylog1.log和mylog2.log剪验。還可以指定文件壓縮選項(xiàng)肴焊,例如,mylog%i.log.gz 或者 沒有l(wèi)og%i.log.zip

triggeringPolicy:

SizeBasedTriggeringPolicy:查看當(dāng)前活動(dòng)文件的大小功戚,如果超過指定大小會(huì)告知RollingFileAppender觸發(fā)當(dāng)前活動(dòng)文件滾動(dòng)娶眷。只有一個(gè)節(jié)點(diǎn):

:這是活動(dòng)文件的大小,默認(rèn)值是10MB啸臀。

例如:每天生成一個(gè)日志文件届宠,保存30天的日志文件。

Java代碼

logFile.%d{yyyy-MM-dd}.log

30

%-4relative [%thread] %-5level %logger{35} - %msg%n

例如:按照固定窗口模式生成日志文件,當(dāng)文件大于20MB時(shí)豌注,生成新的日志文件伤塌。窗口大小是1到3,當(dāng)保存了3個(gè)歸檔文件后轧铁,將覆蓋最早的日志每聪。

Xml代碼

test.log

tests.%i.log.zip

1

3

5MB

%-4relative [%thread] %-5level %logger{35} - %msg%n

4.另外還有SocketAppender、SMTPAppender齿风、DBAppender熊痴、SyslogAppender、SiftingAppender聂宾,并不常用,這些就不在這里講解了诊笤,大家可以參考官方文檔系谐。當(dāng)然大家可以編寫自己的Appender。

負(fù)責(zé)兩件事讨跟,一是把日志信息轉(zhuǎn)換成字節(jié)數(shù)組纪他,二是把字節(jié)數(shù)組寫入到輸出流。

目前PatternLayoutEncoder是唯一有用的且默認(rèn)的encoder晾匠,有一個(gè)節(jié)點(diǎn)茶袒,用來設(shè)置日志的輸入格式。使用“%”加“轉(zhuǎn)換符”方式凉馆,如果要輸出“%”薪寓,則必須用“\”對(duì)“\%”進(jìn)行轉(zhuǎn)義。

例如:

Xml代碼

%-4relative [%thread] %-5level %logger{35} - %msg%n

里面的轉(zhuǎn)換符說明:

轉(zhuǎn)換符作用

c{length}lo{length}logger{length}輸出日志的logger名澜共,可有一個(gè)整形參數(shù)向叉,功能是縮短logger名,設(shè)置為0表示只輸入logger最右邊點(diǎn)符號(hào)之后的字符串嗦董。

Conversion specifierLogger nameResult

%loggermainPackage.sub.sample.BarmainPackage.sub.sample.Bar

%logger{0}mainPackage.sub.sample.BarBar

%logger{5}mainPackage.sub.sample.Barm.s.s.Bar

%logger{10}mainPackage.sub.sample.Barm.s.s.Bar

%logger{15}mainPackage.sub.sample.Barm.s.sample.Bar

%logger{16}mainPackage.sub.sample.Barm.sub.sample.Bar

%logger{26}mainPackage.sub.sample.BarmainPackage.sub.sample.Bar

C{length}class{length}輸出執(zhí)行記錄請(qǐng)求的調(diào)用者的全限定名母谎。參數(shù)與上面的一樣。盡量避免使用京革,除非執(zhí)行速度不造成任何問題奇唤。

contextNamecn輸出上下文名稱。

d{pattern}date{pattern}輸出日志的打印日志匹摇,模式語(yǔ)法與java.text.SimpleDateFormat兼容咬扇。

Conversion PatternResult

%d2006-10-20 14:06:49,812

%date2006-10-20 14:06:49,812

%date{ISO8601}2006-10-20 14:06:49,812

%date{HH:mm:ss.SSS}14:06:49.812

%date{dd MMM yyyy ;HH:mm:ss.SSS}20 oct. 2006;14:06:49.812

F / file輸出執(zhí)行記錄請(qǐng)求的java源文件名。盡量避免使用来惧,除非執(zhí)行速度不造成任何問題冗栗。

caller{depth}caller{depth, evaluator-1, ... evaluator-n}輸出生成日志的調(diào)用者的位置信息,整數(shù)選項(xiàng)表示輸出信息深度。

例如隅居,%caller{2}輸出為:

0[main]DEBUG-loggingstatementCaller+0atmainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)Caller+1atmainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)

例如钠至,%caller{3}輸出為:

16[main]DEBUG-loggingstatementCaller+0atmainPackage.sub.sample.Bar.sampleMethodName(Bar.java:22)Caller+1atmainPackage.sub.sample.Bar.createLoggingRequest(Bar.java:17)Caller+2atmainPackage.ConfigTester.main(ConfigTester.java:38)

L / line輸出執(zhí)行日志請(qǐng)求的行號(hào)。盡量避免使用胎源,除非執(zhí)行速度不造成任何問題棉钧。

m / msg / message輸出應(yīng)用程序提供的信息。

M / method輸出執(zhí)行日志請(qǐng)求的方法名涕蚤。盡量避免使用宪卿,除非執(zhí)行速度不造成任何問題。

n輸出平臺(tái)先關(guān)的分行符“\n”或者“\r\n”万栅。

p / le / level輸出日志級(jí)別佑钾。

r / relative輸出從程序啟動(dòng)到創(chuàng)建日志記錄的時(shí)間,單位是毫秒

t / thread輸出產(chǎn)生日志的線程名烦粒。

replace(p){r, t}p為日志內(nèi)容休溶,r是正則表達(dá)式,將p中符合r的內(nèi)容替換為t扰她。

例如兽掰, "%replace(%msg){'\s', ''}"

格式修飾符,與轉(zhuǎn)換符共同使用:

可選的格式修飾符位于“%”和轉(zhuǎn)換符之間徒役。

第一個(gè)可選修飾符是左對(duì)齊標(biāo)志孽尽,符號(hào)是減號(hào)“-”;接著是可選的最小寬度修飾符忧勿,用十進(jìn)制數(shù)表示杉女。如果字符小于最小寬度,則左填充或右填充狐蜕,默認(rèn)是左填充(即右對(duì)齊)宠纯,填充符為空格。如果字符大于最小寬度层释,字符永遠(yuǎn)不會(huì)被截?cái)唷?b>最大寬度修飾符婆瓜,符號(hào)是點(diǎn)號(hào)"."后面加十進(jìn)制數(shù)。如果字符大于最大寬度贡羔,則從前面截?cái)嗔住|c(diǎn)符號(hào)“.”后面加減號(hào)“-”在加數(shù)字,表示從尾部截?cái)唷?/p>

例如:%-4relative 表示乖寒,將輸出從程序啟動(dòng)到創(chuàng)建日志記錄的時(shí)間 進(jìn)行左對(duì)齊 且最小寬度為4猴蹂。

***********************************************詳解*****************************************

:

過濾器,執(zhí)行一個(gè)過濾器會(huì)有返回個(gè)枚舉值楣嘁,即DENY磅轻,NEUTRAL珍逸,ACCEPT其中之一。返回DENY聋溜,日志將立即被拋棄不再經(jīng)過其他過濾器谆膳;返回NEUTRAL,有序列表里的下個(gè)過濾器過接著處理日志撮躁;返回ACCEPT漱病,日志會(huì)被立即處理,不再經(jīng)過剩余過濾器把曼。

過濾器被添加到中杨帽,為添加一個(gè)或多個(gè)過濾器后,可以用任意條件對(duì)日志進(jìn)行過濾嗤军。有多個(gè)過濾器時(shí)注盈,按照配置順序執(zhí)行。

下面是幾個(gè)常用的過濾器:

LevelFilter:級(jí)別過濾器叙赚,根據(jù)日志級(jí)別進(jìn)行過濾当凡。如果日志級(jí)別等于配置級(jí)別,過濾器會(huì)根據(jù)onMath 和 onMismatch接收或拒絕日志纠俭。有以下子節(jié)點(diǎn):

:設(shè)置過濾級(jí)別

:用于配置符合過濾條件的操作

:用于配置不符合過濾條件的操作

例如:將過濾器的日志級(jí)別配置為INFO,所有INFO級(jí)別的日志交給appender處理浪慌,非INFO級(jí)別的日志冤荆,被過濾掉。

Xml代碼

INFO

ACCEPT

DENY

%-4relative [%thread] %-5level %logger{30} - %msg%n

ThresholdFilter:臨界值過濾器权纤,過濾掉低于指定臨界值的日志钓简。當(dāng)日志級(jí)別等于或高于臨界值時(shí),過濾器返回NEUTRAL汹想;當(dāng)日志級(jí)別低于臨界值時(shí)外邓,日志會(huì)被拒絕。

例如:過濾掉所有低于INFO級(jí)別的日志古掏。

Xml代碼

class="ch.qos.logback.core.ConsoleAppender">


INFO

%-4relative [%thread] %-5level %logger{30} - %msg%n

EvaluatorFilter:求值過濾器损话,評(píng)估、鑒別日志是否符合指定條件槽唾。有一下子節(jié)點(diǎn):

:

鑒別器丧枪,常用的鑒別器是JaninoEventEvaluato,也是默認(rèn)的鑒別器庞萍,它以任意的java布爾值表達(dá)式作為求值條件拧烦,求值條件在配置文件解釋過成功被動(dòng)態(tài)編譯,布爾值表達(dá)式返回true就表示符合過濾條件钝计。evaluator有個(gè)子標(biāo)簽恋博,用于配置求值條件齐佳。

求值表達(dá)式作用于當(dāng)前日志,logback向求值表達(dá)式暴露日志的各種字段:

NameTypeDescription

eventLoggingEvent與記錄請(qǐng)求相關(guān)聯(lián)的原始記錄事件债沮,下面所有變量都來自event炼吴,例如,event.getMessage()返回下面"message"相同的字符串

messageString日志的原始消息秦士,例如缺厉,設(shè)有l(wèi)ogger mylogger,"name"的值是"AUB"隧土,對(duì)于 mylogger.info("Hello {}",name); "Hello {}"就是原始消息提针。

formatedMessageString日志被各式話的消息,例如曹傀,設(shè)有l(wèi)ogger mylogger辐脖,"name"的值是"AUB",對(duì)于 mylogger.info("Hello {}",name); "Hello Aub"就是格式化后的消息皆愉。

loggerStringlogger 名嗜价。

loggerContextLoggerContextVO日志所屬的logger上下文。

levelint級(jí)別對(duì)應(yīng)的整數(shù)值幕庐,所以level > INFO是正確的表達(dá)式久锥。

timeStamplong創(chuàng)建日志的時(shí)間戳。

markerMarker與日志請(qǐng)求相關(guān)聯(lián)的Marker對(duì)象异剥,注意“Marker”有可能為null瑟由,所以你要確保它不能是null。

mdcMap包含創(chuàng)建日志期間的MDC所有值得map冤寿。訪問方法是:mdc.get("myKey")歹苦。mdc.get()返回的是Object不是String,要想調(diào)用String的方法就要強(qiáng)轉(zhuǎn)督怜,例如殴瘦,

((String) mdc.get("k")).contains("val")?.MDC可能為null,調(diào)用時(shí)注意号杠。

throwablejava.lang.Throwable如果沒有異常與日志關(guān)聯(lián)"throwable" 變量為 null. 不幸的是蚪腋, "throwable" 不能被序列化。在遠(yuǎn)程系統(tǒng)上永遠(yuǎn)為null姨蟋,對(duì)于與位置無關(guān)的表達(dá)式請(qǐng)使用下面的變量throwableProxy

throwableProxyIThrowableProxy與日志事件關(guān)聯(lián)的異常代理辣吃。如果沒有異常與日志事件關(guān)聯(lián),則變量"throwableProxy" 為 null. 當(dāng)異常被關(guān)聯(lián)到日志事件時(shí)芬探,"throwableProxy" 在遠(yuǎn)程系統(tǒng)上不會(huì)為null

:用于配置符合過濾條件的操作

:用于配置不符合過濾條件的操作

例如:過濾掉所有日志消息中不包含“billing”字符串的日志神得。

Xml代碼

return message.contains("billing");

ACCEPT

DENY

%-4relative [%thread] %-5level %logger - %msg%n

匹配器,盡管可以使用String類的matches()方法進(jìn)行模式匹配偷仿,但會(huì)導(dǎo)致每次調(diào)用過濾器時(shí)都會(huì)創(chuàng)建一個(gè)新的Pattern對(duì)象哩簿,為了消除這種開銷宵蕉,可以預(yù)定義一個(gè)或多個(gè)matcher對(duì)象,定以后就可以在求值表達(dá)式中重復(fù)引用节榜。是的子標(biāo)簽羡玛。

中包含兩個(gè)子標(biāo)簽,一個(gè)是宗苍,用于定義matcher的名字稼稿,求值表達(dá)式中使用這個(gè)名字來引用matcher;另一個(gè)是讳窟,用于配置匹配條件让歼。

例如:

Xml代碼

odd


statement [13579]

odd.matches(formattedMessage)

NEUTRAL

DENY

%-4relative [%thread] %-5level %logger - %msg%n

其他Filter不太常用了,大家可以參見官網(wǎng)丽啡。


原文:http://my.oschina.net/arlin/blog/519731

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谋右,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子补箍,更是在濱河造成了極大的恐慌改执,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坑雅,死亡現(xiàn)場(chǎng)離奇詭異辈挂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)裹粤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門呢岗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛹尝,你說我怎么就攤上這事∠の玻” “怎么了突那?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)构眯。 經(jīng)常有香客問我愕难,道長(zhǎng),這世上最難降的妖魔是什么惫霸? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任猫缭,我火速辦了婚禮,結(jié)果婚禮上壹店,老公的妹妹穿的比我還像新娘猜丹。我一直安慰自己,他們只是感情好硅卢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布射窒。 她就那樣靜靜地躺著藏杖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脉顿。 梳的紋絲不亂的頭發(fā)上蝌麸,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音艾疟,去河邊找鬼来吩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蔽莱,可吹牛的內(nèi)容都是我干的弟疆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼碾褂,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼兽间!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起正塌,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤嘀略,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乓诽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帜羊,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年鸠天,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讼育。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稠集,死狀恐怖奶段,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剥纷,我是刑警寧澤痹籍,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站晦鞋,受9級(jí)特大地震影響蹲缠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悠垛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一线定、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧确买,春花似錦斤讥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抹剩。三九已至,卻和暖如春蓉坎,著一層夾襖步出監(jiān)牢的瞬間澳眷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蛉艾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钳踊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓勿侯,卻偏偏與公主長(zhǎng)得像拓瞪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子助琐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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