1 logging模塊簡介
logging模塊是Python內置的標準模塊,主要用于輸出運行日志,可以設置輸出日志的等級、日志保存路徑、日志文件回滾等;相比print,具備如下優點:
- 可以通過設置不同的日志等級,在release版本中只輸出重要信息,而不必顯示大量的調試信息;
- print將所有信息都輸出到標準輸出中,嚴重影響開發者從標準輸出中查看其它數據;logging則可以由開發者決定將信息輸出到什么地方,以及怎么輸出;
Logger從來不直接實例化,經常通過logging模塊級方法(Module-Level ?Function)logging.getLogger(name)來獲得,其中如果name不給定就用root。名字是以點號分割的命名方式命名的(a.b.c)。對同一個名字的多個調用logging.getLogger()方法會返回同一個logger對象。這種命名方式里面,后面的loggers是前面logger的子logger,自動繼承父loggers的log信息,正因為此,沒有必要把一個應用的所有logger都配置一遍,只要把頂層的logger配置好了,然后子logger根據需要繼承就行了。
logging.Logger對象扮演了三重角色:
首先,它暴露給應用幾個方法以便應用可以在運行時寫log.
其次,Logger對象按照log信息的嚴重程度或者根據filter對象來決定如何處理log信息(默認的過濾功能).
最后,logger還負責把log信息傳送給相關的handlers.
2 logging模塊使用
2.1 基本使用
配置logging基本的設置,然后在控制臺輸出日志,
import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)logger.info("Start print log")
logger.debug("Do something")
logger.warning("Something maybe fail.")
logger.info("Finish")
運行時,控制臺輸出,
1 2016-10-09 19:11:19,434 - __main__ - INFO - Start print log 2 2016-10-09 19:11:19,434 - __main__ - WARNING - Something maybe fail. 3 2016-10-09 19:11:19,434 - __main__ - INFO - Finish
logging中可以選擇很多消息級別,如:DEBUG < INFO < WARNING < ERROR < CRITICAL,通過賦予logger或者handler不同的級別,開發者就可以只輸出錯誤信息到特定的記錄文件,或者在調試時只記錄調試信息。
將logger的級別改為DEBUG,再觀察一下輸出結果
logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
從輸出結果可以看到,輸出了debug的日志記錄
2016-10-09 19:12:08,289 - __main__ - INFO - Start print log 2016-10-09 19:12:08,289 - __main__ - DEBUG - Do something 2016-10-09 19:12:08,289 - __main__ - WARNING - Something maybe fail. 2016-10-09 19:12:08,289 - __main__ - INFO - Finish
?