午夜视频在线观看区二区-午夜视频在线观看视频-午夜视频在线观看视频在线观看-午夜视频在线观看完整高清在线-午夜视频在线观看网站-午夜视频在线观看亚洲天堂

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

開(kāi)發(fā)者必知的日志記錄最佳實(shí)踐

freeflydom
2025年3月10日 9:43 本文熱度 275
??對(duì)程序來(lái)說(shuō),良好的日志風(fēng)格能夠極大的降低排錯(cuò)的成本,增強(qiáng)程序的健壯性與可運(yùn)維性,但大多數(shù)開(kāi)發(fā)同學(xué)并沒(méi)有將日志的重要性提的和代碼本身一樣高,本文討論我個(gè)人記錄日志的一些最佳實(shí)踐

基本原則

將日志作為程序的第二個(gè)UI

??軟件的第一UI當(dāng)然是使用方或API調(diào)用方,而日志作為第二UI,用于開(kāi)發(fā)、運(yùn)維、合作方進(jìn)行線上應(yīng)用狀態(tài)的檢測(cè)與問(wèn)題排查。日志的質(zhì)量是代碼質(zhì)量的一部分。
 

寫(xiě)日志時(shí),考慮看日志的人無(wú)法訪問(wèn)代碼

??通常來(lái)說(shuō),看日志的角色不僅僅是開(kāi)發(fā)代碼的人員,包括線上值班人員、售后人員、其他合作方系統(tǒng)的人員,可能都需要依賴(lài)日志排查問(wèn)題。今天的IT系統(tǒng)日志更容易收集后中心化,使得不同角色可以更容易訪問(wèn)日志。對(duì)于API,尤其是涉及其他多個(gè)子系統(tǒng)調(diào)用的復(fù)雜API,良好的日志可以為調(diào)用方、線上值班提供豐富的問(wèn)題排查依據(jù),在代碼中打印日志時(shí)要考慮無(wú)法訪問(wèn)代碼的角色。
  

日志的主要用戶是Human,次要用戶是機(jī)器,所以可讀性很重要

??可讀性包含的內(nèi)容很多,下面會(huì)解釋一些原則,但最基本的原則是縮進(jìn)、空格等需要讓閱讀者易于閱讀。同時(shí)日志格式也保證易于模式化解析(簡(jiǎn)單的字符串匹配,而不是復(fù)雜的正則)
 

考慮日志的目的是什么

??日志的目的不僅僅是線上Debug,也可以是記錄性能或是收集后做數(shù)據(jù)分析,考慮日志在系統(tǒng)的目的,寫(xiě)日志時(shí)具備一定針對(duì)性。
 

最佳實(shí)踐

 

為日志添加上下文

??非常General的日志是非常糟糕的,不僅無(wú)助于定位問(wèn)題,更容易造成混淆。比如下面這個(gè)日志:
 
2021-11-30 16:44:52,725 [WARN] Connection failed!
 
無(wú)法定位是哪段代碼,連接什么失敗,也不知道失敗的參數(shù)是什么,更好的日志格式如下:
 
 
類(lèi)似問(wèn)題還比如:
 
//don't do that
java.lang.IndexOutOfBoundsException
//do that
IndexOutOfBoundsException: index 25 is greater than list size 20.
 
 
對(duì)于日志,盡量避免太general的日志,記得我們的原則,知道我們的第二個(gè)UI的目標(biāo)受眾是誰(shuí),看日志的人大多數(shù)可能無(wú)法訪問(wèn)代碼。

端到端的日志&并發(fā)線程日志問(wèn)題

每個(gè)請(qǐng)求都需要有一個(gè)唯一標(biāo)識(shí)符與之對(duì)應(yīng),通常是一個(gè)GUID,主要用于兩個(gè)用途
1.在不同系統(tǒng)或微服務(wù)間唯一標(biāo)識(shí)一個(gè)請(qǐng)求
2.同一個(gè)應(yīng)用內(nèi)不同并發(fā)線程唯一標(biāo)識(shí)一個(gè)請(qǐng)求
 
比如我們可以通過(guò)下面一個(gè)GUID追蹤的一個(gè)請(qǐng)求完整的過(guò)程
   
careyson@CareySonMac log % grep "C97E2488-170A-4D01-8B90-BE562FD78342" xxx.log
2021-11-30 16:44:52,725 [WARN] ModifyDBInstanceVersionImpl(46) - [C97E2488-170A-4D01-8B90-BE562FD78342,yunji-dbsingle2,ModifyDBInstanceVersion] XXX Start
2021-11-30 16:44:53,009 [WARN] ModifyDBInstanceVersionImpl(46) - [C97E2488-170A-4D01-8B90-BE562FD78342,yunji-dbsingle2,ModifyDBInstanceVersion] Begin Instance Rule Check [source version=, target version=]
2021-11-30 16:44:53,010 [WARN] ModifyDBInstanceVersionImpl(46) - [C97E2488-170A-4D01-8B90-BE562FD78342,yunji-dbsingle2,ModifyDBInstanceVersion] rule check passed. [source version=, target version=]
2021-11-30 16:44:53,011 [WARN] ModifyDBInstanceVersionImpl(46) - [C97E2488-170A-4D01-8B90-BE562FD78342,yunji-dbsingle2,ModifyDBInstanceVersion] Starting check  config
2021-11-30 16:44:53,078 [WARN] ModifyDBInstanceVersionImpl(46) - [C97E2488-170A-4D01-8B90-BE562FD78342,yunji-dbsingle2,ModifyDBInstanceVersion] Check  config Complete
2021-11-30 16:44:53,079 [WARN] ModifyDBInstanceVersionImpl(46) - [C97E2488-170A-4D01-8B90-BE562FD78342,yunji-dbsingle2,ModifyDBInstanceVersion] Starting get Source Custins info
.....

變量值與常量值分開(kāi)

將變量值與常量值分開(kāi)可以使得日志更容易閱讀,無(wú)論在代碼還是日志本身的搜索也會(huì)變的簡(jiǎn)單,如果用工具抽取參數(shù)值也變的簡(jiǎn)單,下面是一個(gè)示例:
 
 
如果URL是一個(gè)很長(zhǎng)的串,那么閱讀的體驗(yàn)將會(huì)非常糟糕。
 

區(qū)分Warn與Error

日志按照嚴(yán)重性同樣也會(huì)分級(jí),業(yè)界標(biāo)準(zhǔn)使用最多的還是Info、Warn與Error。Info通常沒(méi)什么說(shuō)的,程序符合預(yù)期正常工作,在過(guò)程中記錄相關(guān)信息,就是Info,Warn和Error值得提一下。
Warn意味著程序正常工作,但存在一些問(wèn)題,這種問(wèn)題通常在我們預(yù)期之內(nèi)。
Error意味著程序異常,且這種異常不在我們預(yù)期內(nèi)。
 
下面是一個(gè)程序中調(diào)用其他服務(wù)的簡(jiǎn)單例子:
 
 
  

如果可能,出錯(cuò)時(shí)附上KB或錯(cuò)誤代號(hào)

寫(xiě)程序的人通常對(duì)程序所代表的業(yè)務(wù)有一定了解,但其他日志用戶可能并沒(méi)有背景知識(shí)以及業(yè)務(wù)限制,在有限的日志中通常很難說(shuō)清楚,如果有對(duì)應(yīng)KB或幫助文檔,以及錯(cuò)誤代號(hào),可以附在日志中,幫助日志用戶快速了解背景。比如下面這個(gè)例子:
 
 

避免記錄敏感信息

??日志并不會(huì)像數(shù)據(jù)庫(kù)那樣有高安全等級(jí),也就是訪問(wèn)日志的安全權(quán)限通常遠(yuǎn)遠(yuǎn)低于其他應(yīng)用,且今天的日志更多是上傳后中心化,更無(wú)法控制日志的擴(kuò)散范圍,因此對(duì)于敏感信息請(qǐng)不要記錄,包括密碼信息、Security Token信息、敏感身份信息等。
 

使用英文記錄日志

??英文記錄不僅僅是標(biāo)準(zhǔn)化和易于閱讀的問(wèn)題,而是今天的IT系統(tǒng),日志可能經(jīng)過(guò)多個(gè)系統(tǒng)中心化,這些系統(tǒng)只要有一個(gè)不支持UTF格式,就可能導(dǎo)致亂碼,使用英文可以盡量避免這些麻煩。
 

小結(jié)

??對(duì)于程序來(lái)說(shuō),代碼質(zhì)量除了代碼本身,還包括日志。將日志當(dāng)做程序的第二UI認(rèn)真對(duì)待,不僅能使得我們的程序調(diào)試與開(kāi)發(fā)成本大幅下降,還能使得程序的運(yùn)維排錯(cuò)更加簡(jiǎn)潔,Bug更早發(fā)現(xiàn)。

?轉(zhuǎn)自https://www.cnblogs.com/CareySon/p/18757020/Logging_best_practice_for_developer


該文章在 2025/3/10 9:43:32 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产精品免费网站 | 911国产精品无码 | 丰满少妇高潮掺叫无码 | 成年永久一区二区三区免费视频 | 国产午夜精品美女视频露脸 | 丰满少妇销魂视频在线观看 | 2025精品国产自在现线看 | 国产无码在 | 国产精品一区二区熟女不卡 | 国产三级韩国三级日产三级 | 国产精品无码一区二区三区免费 | 91在线国自产拍 | 国产一级a爱片在线观看视频 | 爆乳一区二区三区无码 | 国产黄色靠逼视频网站 | 91精品国产免费久久国语蜜臀 | 国产三级不卡在线观看 | 精品无人区无码乱码大片国产 | 97人妻免费精品视频 | 国产精品成人一区 | 91在线免| 国产成人短视频在线观看免费 | 国产精品无码视频一区二区三区 | 国产自慰在线观看 | 高清中文无码久久 | 97人妻中文字幕无码系列 | 精品三级在线观看 | 99久久久久久宅男 | 99久久国产综合精品swag | 2025国自产拍精品网站 | 精品精品国产自在久国产 | 国产毛片自拍 | 国产亚洲精久久久久久无码色戒 | 国产超清无码一级内射视频 | 囯产免费一区 | 岛国aⅴ无码免费无禁网站 岛国av免费在线观看 | 91精品无码专区 | 国产精品无码1区2区3区 | 国产午夜无码av毛片 | 精品无码制服丝袜日韩视频 | 国产欧美久久久久久精品一区二区 |