今天分享程式開發過程中,跟 debug 息息相關的 logging。
一開始在程式初學時,我們多半會使用 print, console.log 等指令,把我們想知道的變數狀態輸出在螢幕上,藉此來確認程式跟我們預期的執行結果是否一致?
除了列印變數狀態之外,大概還有一些用來確認是否進入 function?for loop 執行圈數?if-else 執行分支結果?這些都是幫助我們判斷程式執行過程的輔助資訊,而再更進階一點就是靠 debugger 來控制程式執行,可以選擇一次執行一行指令、跳進函式內部執行、跳出目前執行迴圈等,可以清楚地了解程式的執行狀況。
但以上的方式有一個最大的問題就是沒辦法把紀錄保存下來,程式執行完就沒了。解決方式是把 print 到螢幕的 stdout 輸出流重新導向到檔案,又或者同時輸出到 stdout 和 file。
比較常見的程式執行的紀錄大多會包含幾個要素
logging 的需求可能會因為專案的架構而變得更加龐大複雜,可能會拆分成不同類別的 log
另外也有避免 log 容量佔用太多硬碟空間,可以設定 log 保留的時間,或是 log 訊息的數量上限。
或者也可以設定 log 按日、周拆分
以上,logging 進階的應用還有很多,簡短分享一下
[1]: RFC 5424: The Syslog Protocol