如果你在開發時還在使用print,請一定要試試 logging ,本篇會介紹為何要使用Logging,以及logging的基本用法、格式設定、跨模組日誌以及輸出至檔案。本篇的範例使用python版本為3.8。
1. 什麼是 logging ?
在學校剛接觸軟體開發時,當我們要知道程式跑到哪裡,變數現在的值是多少,我們都會使用print去印出來看,進行除錯。
但出了社會後,使用print會有許多困擾:
- print的時間點或是來源要自己寫在輸出字串內
- 輸出到檔案較麻煩,要自行用open打開一個檔案填寫
- print大量資料會造成效能降低,所以用完的print要自行刪除,或是將其註解
- 如果程式在多台Server同時運行,彙整這些log不容易
Python的 logging 可以滿足這些需求。
2. logging 基本用法
logging的Log有分五個等級,DEBUG等級最低,預設只記錄WARNING等級以上的Log
- DEBUG: 開發時使用,產品上線後可以將其設定為不顯示
- INFO: 用來確認程式目前執行到哪,在處理些什麼事情
- WARNING: 用以顯示警告,如磁碟容量將不足,或收到異常資料等,不影響程式執行
- ERROR: 顯示某些功能因為一些錯誤無法執行
- CRITICAL: 用以顯示程式已經無法執行的訊息
接下來會從最基本的用法開始,加上各式各樣的功能
2.1 最簡單的使用方法
因預設等級為WARNING,故只會顯示WARNING、ERROR、CRITICAL的訊息,輸出結果:
2.2 基本設定
直接上程式範例,使用logging.basicConfig做基本設定
給定filename參數,設定log輸出路徑,log都會輸出至指定的路徑,指定後terminal就不會輸出log,若要同時顯示log在terminal,請等待下篇文章介紹XD
給定level參數,共五種,分別是logging.DEBUG、logging.INFO、logging.WARNING、logging.ERROR、logging.CRITICAL,指定後,如前小節所說,只會輸出等級大於或等於設定的Log
給定format參數,可以客製化Log輸出的格式,asctime指的是Log產生的時間,levelname指的是log是屬於哪個等級,message則是log的訊息,還有許多可以設定的參數,請參考LogRecord attributes
給定datefmt參數,可以修改上述asctime的顯示的格式,使用方式與datetime內的時間格式相同,可以參考strftime() and strptime() Behavior
basic.log內輸出的結果
2.3 從多個模組使用logging
若有多個模組,可以直接在模組內import logging,直接使用即可,直接上程式碼
main.py
basic_lib.py
輸出的結果 basic.log
3. 結論
謝謝各位讀者看到這裡,以上介紹了python logging的基本用法,下一篇會再介紹logging的進階用法,包含
- 使用多個logger,讓log可以分類,各自儲存到不同的檔案、log Server或寄信至email信箱
- log自動備份,可以設定限制檔案大小,與備份數量,避免log過多塞爆硬碟
- multiple thread或multiple process使用log
若你有任何覺得好用的套件或是任何建議,也歡迎您在下方留言告訴我以及分享給其他人唷
若你覺得文章對你很有幫助,歡迎在網頁右方填入你的email訂閱本站唷