一般前端開發(fā)同學(xué),對日志其實(shí)不太敏感,畢竟前端大多數(shù)情況下,不太關(guān)心日志。即使有,也可能調(diào)用一些第三方的統(tǒng)計,比如百度統(tǒng)計或者別的等。在 Node.js(下文中簡稱node) 推進(jìn)過程中,也發(fā)現(xiàn)我們平常打日志太隨意,該打的日志沒有打,打的一些關(guān)鍵日志缺少必要上下文信息,導(dǎo)致在線上定位問題的時候很困難。
本文主要梳理了目前我們團(tuán)隊(duì)在nodejs開發(fā)中日志方面存在的問題,以及通過統(tǒng)一日志規(guī)范,希望達(dá)到什么樣的效果。
問題
node日志不規(guī)范,打日志太隨意 沒有良好的日志格式、約定的字段,在 ELK 里不能很好的解析&檢索 (PS: ELK文章在路上) 由于node對接的后端服務(wù)化,調(diào)用鏈不清晰,定位問題困難 數(shù)據(jù)部門對node日志的使用,沒有明確的記錄。node修改了日志,導(dǎo)致統(tǒng)計數(shù)據(jù)異常目標(biāo)
規(guī)范日志打印字段&格式,便于 ELK 檢索 增強(qiáng)node上下游(nginx/后端)日志格式,加入惟一 requestId,方便微服務(wù)下定位問題 統(tǒng)計應(yīng)用運(yùn)行情況,性能數(shù)據(jù) 維護(hù)數(shù)據(jù)部門對node日志的使用情況實(shí)現(xiàn)方案
日志類型
參考一些日志的最佳實(shí)踐,目前將node日志分為如下幾種類型(scope):
desc: 系統(tǒng)啟動、運(yùn)行過程中,打的日志,表明系統(tǒng)的一些啟動日志、啟動參數(shù)等,也包含在 不能 捕獲到http上下文的時候,打的日志 stat: 系統(tǒng)性能統(tǒng)計日志,應(yīng)用會定時收集一些性能信息,便于查詢應(yīng)用當(dāng)前狀態(tài) visit: 每個http請求相關(guān)的日志,會包含惟一的 requestId,定位該請求相關(guān)的所有日志 biz: 業(yè)務(wù)數(shù)據(jù)相關(guān)日志,主要提供給數(shù)據(jù)統(tǒng)計使用日志級別
只使用 FATAL、ERROR、WARN、INFO 和 DEBUG 等級。
FATAL - 導(dǎo)致程序退出的嚴(yán)重系統(tǒng)級錯誤,不可恢復(fù),當(dāng)錯誤發(fā)生時,系統(tǒng)管理員需要立即介入,一般應(yīng)用代碼 不 使用。 ERROR - 運(yùn)行時異常以及預(yù)期之外的錯誤,也需要立即處理,但緊急程度低于FATAL,當(dāng)錯誤發(fā)生時,影響了程序的正確執(zhí)行。需要注意的是這兩種級別屬于服務(wù)自己的錯誤,需要管理員介入,用戶輸入出錯不屬于此分類,請求后端、讀文件、數(shù)據(jù)庫等超時、返回錯誤結(jié)構(gòu),屬于ERROR WARN - 預(yù)期之外的運(yùn)行時狀況,表示系統(tǒng)可能出現(xiàn)問題。對于那些目前還不是錯誤,然而不及時處理也會變成錯誤的情況,也可以記為WARN,如磁盤過低。 INFO - 有意義的事件信息,記錄程序正常的運(yùn)行狀態(tài),比如收到請求,成功執(zhí)行。通過查看INFO,可以快速定位WARN,ERROR, FATAL。INFO不宜過多,通常情況下不超過 DEBUG 的10%。 DEBUG - 與程序運(yùn)行時的流程相關(guān)的詳細(xì)信息以及當(dāng)前變量狀態(tài)。日志格式/字段
新聞熱點(diǎn)
疑難解答
圖片精選