Python 日誌記錄與程序流追蹤(基礎篇)
阿新 • • 發佈:2019-01-29
方法 文件操作 期望 流程 nal 代碼整潔 基礎篇 edit 磁盤空間
日誌記錄(Logging)
More than
每次用 terminal debug 時都要手動在各種可能出現 bug 的地方 print 相關信息來確認 bug 的位置;
每次完成 debug 後為了避免輸出太多細節信息和代碼整潔,又需要把幾個關鍵位置的 print 註釋掉甚至刪掉;
當下次出 bug 時,繼續上述步驟。。。
有沒有更好的方法呢?
等級(Level )
Python 3 中提供了非常方便的日誌記錄庫 logging
,可以記錄不同等級(level)的日誌信息。系統默認的等級有:
- DEBUG - 等級最低,一般只有在調試程序時顯示的提示信息;
- INFO - 用於追蹤、確認程序運行正常;
- WARNING - 表示一些不期望事情的發生或即將發生(比如網絡狀況差,磁盤空間即將耗盡等)但不影響程序運行;
- ERROR - 由於某些問題,導致程序的部分功能出錯;
- CRITICAL - 等級最高,用於提示嚴重錯誤,嚴重到可能讓程序崩潰。
logging
中的默認等級是 WARNING
;亦即,logging.level
缺省時,等級低於 WARNING
的信息(DEBUG
、INFO
)不會被日誌記錄。
基本用法
初始化更改等級為 DEBUG
import logging logging.basicConfig(level=logging.DEBUG) logging.debug(‘Message from DEBUG‘) logging.info(‘Message from INFO‘) logging.warning(‘Message from WARNING‘)
運行後將在 stdout 顯示日誌信息:
DEBUG:root:Message from DEBUG
INFO:root:Message from INFO
WARNING:root:Message from WARNING
記錄到日誌文件 “example.log”
import logging logging.basicConfig(filename=‘example.log‘, level=logging.DEBUG) logging.debug(‘Message from DEBUG‘) logging.info(‘Message from INFO‘) logging.warning(‘Message from WARNING‘)
運行後查看文件 example.log:
$ cat example.log
將看到日誌信息。
註意:文件操作模式默認為 “append”,即不覆蓋舊文件內容。
每次運行覆蓋日誌文件
import logging
logging.basicConfig(filename=‘example.log‘, filemode=‘w‘, level=logging.DEBUG)
logging.debug(‘Message from DEBUG‘)
logging.info(‘Message from INFO‘)
logging.warning(‘Message from WARNING‘)
自定義日誌文件格式
import logging
logging.basicConfig(filename=‘data_conversion.log‘,
filemode=‘w‘,
format=‘%(asctime)s [%(levelname)s]: %(message)s‘,
datefmt=‘%Y/%m/%d %I:%M:%S %p‘,
level=logging.INFO)
logging.debug(‘Message from DEBUG‘)
logging.info(‘Message from INFO‘)
logging.warning(‘Message from WARNING‘)
日誌文件內容為:
2019/01/28 10:26:29 PM [DEBUG]: Message from DEBUG
2019/01/28 10:26:29 PM [INFO]: Message from INFO
2019/01/28 10:26:29 PM [WARNING]: Message from WARNING
根據以上內容就可以簡單地追蹤程序流程和關鍵信息了。
Reference
Written with StackEdit.
Python 日誌記錄與程序流追蹤(基礎篇)