1. 程式人生 > >Python 日誌記錄與程序流追蹤(基礎篇)

Python 日誌記錄與程序流追蹤(基礎篇)

方法 文件操作 期望 流程 nal 代碼整潔 基礎篇 edit 磁盤空間

日誌記錄(Logging)

More than print
每次用 terminal debug 時都要手動在各種可能出現 bug 的地方 print 相關信息來確認 bug 的位置;
每次完成 debug 後為了避免輸出太多細節信息和代碼整潔,又需要把幾個關鍵位置的 print 註釋掉甚至刪掉;
當下次出 bug 時,繼續上述步驟。。。
有沒有更好的方法呢?

等級(Level )

Python 3 中提供了非常方便的日誌記錄庫 logging,可以記錄不同等級(level)的日誌信息。系統默認的等級有:

  • DEBUG - 等級最低,一般只有在調試程序時顯示的提示信息;
  • INFO - 用於追蹤、確認程序運行正常;
  • WARNING - 表示一些不期望事情的發生或即將發生(比如網絡狀況差,磁盤空間即將耗盡等)但不影響程序運行;
  • ERROR - 由於某些問題,導致程序的部分功能出錯;
  • CRITICAL - 等級最高,用於提示嚴重錯誤,嚴重到可能讓程序崩潰。

logging 中的默認等級是 WARNING;亦即,logging.level缺省時,等級低於 WARNING 的信息(DEBUGINFO)不會被日誌記錄。

基本用法

初始化更改等級為 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 日誌記錄與程序流追蹤(基礎篇)