以下以簡單的例子說明logging模組的簡易用法。
簡單設置與使用
import logging
logging.basicConfig(filename='my_app.log', filemode='w', level=logging.INFO)
logging.info('一般訊息。')
最後寫入一條INFO層級的訊息到記錄檔中。這裡所謂的level(層級),即所要記錄訊息所屬的層級種類,或是嚴重的程度,這由程式員自行決定。
logging的幾個標準層級level如下,越後面的層級越高:
- DEBUG:最詳細的訊息,通常用在分析問題時。
- INFO:一般正常的訊息。
- WARNING:警告訊息。指示有某種問題發生,但程式仍如預期般正常運作。
- ERROR:錯誤訊息。
- CRITICAL:嚴重錯誤訊息。
而logging用來記錄不同層級訊息的函式的命名就來自於這些層級,分別是:
- debug()
- info()
- warning()
- error()
- critical()
logging.warning('警告訊息!')
INFO:root:一般訊息。這是預設的記錄格式,其格式是levelname:name:message。格式是可以修改的。
如果想改成levelname - message,那麼basicConfig()可改成:
logging.basicConfig(filename='my_app.log', filemode='w', level=logging.INFO, format='{levelname} - {message}', style='{')
這裡用str.format()的style來格式字串,故要再指定style參數。
格式字串中的levelname, message是LogRecord屬性的名稱,還有其他的屬性可用,像asctime是時間,預設格式是YYYY-MM-DD hh:mm:ss,sss。如果想用不同格式,可用datefmt參數指定,如:
logging.basicConfig(filename='my_app.log', filemode='w', level=logging.INFO, format='{asctime} - {levelname} - {message}', style='{', datefmt='%Y/%m/%d %H:%M:%S')
最後提醒一下,在同一Python session裡,logging.basicConfig()只作用一次,重複做是無效的。同時,logging.warning()這類函式若不慎寫在loggin.bascConfig()之前也會讓後者沒有作用。試一下以下代碼並觀察一下結果就知道了:
import logging
logging.warning('未bascConfig()就warning()!')
logging.basicConfig(filename='my_app.log', filemode='w', level=logging.INFO)
logging.basicConfig(filename='my_app.log', filemode='w', level=logging.INFO, format='{levelname} - {message}', style='{')
logging.basicConfig(filename='my_app.log', filemode='w', level=logging.INFO, format='{asctime} - {levelname} - {message}', style='{', datefmt='%Y/%m/%d %H:%M:%S')
logging.info('一般訊息。')
logging.warning('警告訊息!')
以上只是簡單使用,logging可以做到很複雜的事,詳細可見以下參考中的官方文件。
參考
- https://docs.python.org/3/howto/logging.html
- https://docs.python.org/3/library/logging.html

 
沒有留言:
張貼留言