




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第基于slf4j日志MDC輸出格式的問題publicvoidformat(finalLogEventevent,finalStringBuildertoAppendTo){
finalReadOnlyStringMapcontextData=event.getContextData();
//ifthereisnoadditionaloptions,weoutputeverysingle
//Key/ValuepairfortheMDCinasimilarformattoHashtable.toString()
//如果沒有附加的屬性,我們輸出每一個單獨的MDC配置的key/value對,類似與Hashtable.toString()的格式
if(full){
if(contextData==null||contextData.size()==0){
toAppendTo.append("{}");
return;
appendFully(contextData,toAppendTo);
}else{
if(keys!=null){
if(contextData==null||contextData.size()==0){
toAppendTo.append("{}");
return;
//存在附加屬性配置
appendSelectedKeys(keys,contextData,toAppendTo);
}elseif(contextData!=null){
//otherwisetheyjustwantasinglekeyoutput
finalObjectvalue=contextData.getValue(key);
if(value!=null){
StringBuilders.appendValue(toAppendTo,value);
}
我們配置了%X擴展即存在附加屬性配置
//按照配置的MDCkeys輸出,輸出格式為{key=value,key2=value2}
privatestaticvoidappendSelectedKeys(finalString[]keys,finalReadOnlyStringMapcontextData,finalStringBuildersb){
//Printallthekeysinthearraythathaveavalue.
finalintstart=sb.length();
sb.append('{');
for(inti=0;ikeys.length;i++){
finalStringtheKey=keys[i];
finalObjectvalue=contextData.getValue(theKey);
if(value!=null){//!contextData.containskey(theKey)
if(sb.length()-start1){
sb.append(",");
sb.append(theKey).append('=');
StringBuilders.appendValue(sb,value);
sb.append('}');
}
問題定位后修改配置即可,修改配置后驗證格式符合我們的期望
Propertyname="layout"%d%p[%t]%c{1.}:%M:%L%X{myTraceId,}%m%n/Property
小結(jié)一下:MDC配置的key,日志會按照逗號切分出keys列表,如果keys列表小于等于1則直接輸出一個單獨的value值。如果大于1則按照map的格式輸出,即:{key1=value1,key2=value2}
slf4j輸出日志的語法
slf4j輸出log的語法
1.直接拼接字符串
用字符串拼接的構(gòu)造方式輸出log,字符串消息還是會被求值,存在類型轉(zhuǎn)換和字符串連接的性能消耗。例:
intindex=1;
("這是第"+index+"條數(shù)據(jù)");
("這是第"+String.valueOf(index)+"條數(shù)據(jù)");
輸出結(jié)果:
2.使用SLF4J的格式化功能
這種用法不存在上面提到的缺點。SLF4J使用自己的格式化語法{},同時提供了適合不同參數(shù)個數(shù)的方法重載:
logger.debug(Stringformat,Objectparam);//支持一個參數(shù)
logger.debug(Stringformat,Objectparam1,Objectparam2);//支持兩個參數(shù)
logger.debug(Stringformat,Object…param);//任意數(shù)量參數(shù),構(gòu)造參數(shù)數(shù)組具有一定的性能損耗
例:
intindex1=1;intindex2=2;i
("這是第{}條數(shù)據(jù)",index1);
("這是第{}、{}條數(shù)據(jù)",index1,index2);
輸出:
3.格式化占位符的轉(zhuǎn)義
連續(xù)的{}才被認為是格式化占位符
例:
("{1,2}這是第{}條數(shù)據(jù)",index2);
("{1,2}這是第{{}}條數(shù)據(jù)",index2);
輸出:
用”\”轉(zhuǎn)義{}占位符
例:
/**用”\”轉(zhuǎn)義{}占位符*/
("\\{}這是第{}條數(shù)據(jù)",index2);
/**用“\”本身轉(zhuǎn)義“{}”中的”\”*/
("\\\\{}這是第{}條數(shù)據(jù)",index3);
輸出:
4.log前做條件判斷
isDebugEnabled()的方法在debugdisabled的情況下不存在構(gòu)造字符串參數(shù)的性能消耗,但是如果debugenabled,debug是否被enabled將會被求值兩次:
一次是isDebugEnabled(),
一次是debug()本身(該影響較小,因為求值logger狀態(tài)花費的時間比真正log一條語句花費的時間的1%都還要小)。
例:
if(logger.isDebugEnabled()){
("這是第{}條數(shù)據(jù)",index2);
輸出:
5、打印異常堆棧
logger.error("Failedtoformat{}",s,e);
slf4j總結(jié)
slf4j是Java的一種LogApi,類似ApacheCommonsLogging。
官網(wǎng)介紹:/.
在SLF4J中,不需要進行字符串拼接,不會導(dǎo)致使用臨時字符串帶來的消耗。
相反,我們使用帶占位符的模板消息來記錄日志信息,并提供實際值作為參數(shù)??梢允褂脦?shù)版的日志方法,也可以通過Object數(shù)組傳入。在為日志信息產(chǎn)生最終的字符串之前,該方法會檢查是否開啟了特定的日志級別,這不僅降低了內(nèi)存占用,而且預(yù)先減少了執(zhí)行字符串拼接所消耗的CPU時間。
log.debug("Found{}recordsmatchingfilter:'{}'",records,filter);//slf4j
log.debug("Found"+records+"recordsmatchingfilter:'"+filter+"'");//log4j
可以看出SLF4J的優(yōu)點有:
更簡略易讀;
在日志級別不夠時,少了字符串拼接的開銷,不會調(diào)用對象(records/filter)的toString方法。通過使用日志記錄方法,直到你使用到的時候,才會去構(gòu)造日志信息(字符串),這就同時提高了內(nèi)存和CPU的使用率。
Slf4j在1.6.0之后,更是支持了異常堆棧的打印,作為最后一個參數(shù)傳
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆山東省臨沭縣青云鎮(zhèn)中心中學(xué)英語七年級第二學(xué)期期中檢測試題含答案
- 2025年生態(tài)修復(fù)植被重建技術(shù)在城市生態(tài)修復(fù)生態(tài)效益分析中的應(yīng)用報告
- 2025年智慧港口自動化裝卸設(shè)備產(chǎn)業(yè)政策解讀報告
- 2025年元宇宙社交平臺虛擬社交平臺穩(wěn)定性與用戶體驗分析報告
- 2025年智能制造專項補貼資金申請政策解讀與應(yīng)用報告
- 2025年工業(yè)互聯(lián)網(wǎng)軟件定義網(wǎng)絡(luò)SDN在智能電網(wǎng)調(diào)度優(yōu)化報告
- 2025年醫(yī)藥企業(yè)市場拓展策略與品牌建設(shè)報告
- 零售私域流量運營與用戶參與度提升策略優(yōu)化報告001
- 再障的護理課件模板
- 2025年互聯(lián)網(wǎng)金融科技服務(wù)平臺在金融科技創(chuàng)新競賽中的案例分析報告
- 家政服務(wù)培訓(xùn) 課件
- 2025年人教版小學(xué)五年級下冊數(shù)學(xué)期末重難點測評試題(含答案和解析)
- 2024年天津市應(yīng)急管理局招聘行政執(zhí)法專職技術(shù)檢查員筆試真題
- 廣西壯族自治區(qū)欽州市2024-2025學(xué)年高二上學(xué)期期末檢測歷史試題(含答案)
- 2025年養(yǎng)老護理員職業(yè)考試試題及答案
- 音樂杜鵑圓舞曲教案
- 揭陽惠來縣紀委監(jiān)委等部門屬下事業(yè)單位招聘筆試真題2024
- 春蘇教版六年級數(shù)學(xué)總復(fù)習(xí)30課時教學(xué)設(shè)計
- 黨課課件含講稿:以作風(fēng)建設(shè)新成效激發(fā)干事創(chuàng)業(yè)新作為
- 西安美術(shù)學(xué)院《舞臺編導(dǎo)藝術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 城投公司工程管理制度
評論
0/150
提交評論