




版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉儲物流配送合同規(guī)范
- 紡織技術(shù)創(chuàng)新思路試題及答案
- 紡織行業(yè)新興市場的開發(fā)與設(shè)計趨勢探討試題及答案
- 2025黑龍江大興安嶺林業(yè)集團公司招聘撲火隊設(shè)備操作員73人筆試參考題庫附帶答案詳解
- 2025福建泉州市仙公山風(fēng)景名勝區(qū)有限公司招聘7人筆試參考題庫附帶答案詳解
- 2025年駐馬店全域礦業(yè)開發(fā)有限公司招聘27人筆試參考題庫附帶答案詳解
- 2025年山東省科創(chuàng)集團有限公司權(quán)屬企業(yè)招聘12人筆試參考題庫附帶答案詳解
- 哈爾濱委托協(xié)議翻譯電話
- 藝術(shù)類期末試題及答案
- 分布式光伏發(fā)電項目可行性分析與發(fā)展前景
- 中建全套雨季施工方案
- 青春期異性之間的交往課件高中上學(xué)期心理健康主題班會
- 北京工業(yè)大學(xué)《計量經(jīng)濟學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 人工智能應(yīng)用開發(fā)合同
- 猩紅熱課件完整版本
- 肌肉骨骼康復(fù)學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 高三英語一輪復(fù)習(xí)備考實踐經(jīng)驗分享 課件
- 小學(xué)五年級體育教案全冊(人教版)
- 農(nóng)業(yè)保險理賠服務(wù)操作流程手冊
- 《交換與路由技術(shù)》 課件全套 曹炯清 第1-9部分 學(xué)習(xí)環(huán)境的搭建- 綜合實訓(xùn)與技能比賽
- 第30屆WMO初測2年級B試卷
評論
0/150
提交評論