使用配置檔案方式記錄Python程式日誌

bjehp發表於2020-11-16

開發者可以通過三種方式配置日誌記錄:

  1. 呼叫配置方法的Python程式碼顯式建立記錄器、處理程式和格式化程式。
  2. 建立日誌配置檔案並使用fileConfig() 函式讀取。
  3. 建立配置資訊字典並將其傳遞給dictConfig()函式。

相對第一種,第二種使用配置檔案方式更有優勢,主要是配置和程式碼的分離,結構上更清晰,以及非開發者輕鬆修改日誌記錄屬性的能力。

本文將介紹第二種使用配置檔案方式記錄Python程式日誌,將Python程式日誌分別列印到控制檯和日誌檔案,日誌檔案按時間戳滾動迭代,且可以自動刪除過期檔案。

配置檔案方式列印日誌

首先建立配置檔案logging.conf,以下是檔案內容。這裡主要介紹TimedRotatingFileHandler的配置引數args,第一個引數/var/log/demo3/example.log表示日誌輸出的檔案目錄,第二個引數d表示以天為單位迭代日誌檔案,第三個引數1表示每隔1個週期,第二個引數和第三個引數相乘表示每隔幾個週期迭代一個日誌檔案,第四個引數3表示僅保留三個日誌檔案,超過該值的日誌檔案會被自動清除。

[loggers]
keys=root

[handlers]
keys=consoleHandler,timedRotatingFileHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=INFO
handlers=consoleHandler,timedRotatingFileHandler

[handler_consoleHandler]
class=StreamHandler
level=INFO
formatter=simpleFormatter
args=(sys.stdout,)

[handler_timedRotatingFileHandler]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=simpleFormatter
args=('/var/log/demo3/example.log','d',1,3)

[formatter_simpleFormatter]
format=%(asctime)s %(name)s %(levelname)s - %(message)s
datefmt=

編寫Python程式,使用fileConfig() 函式讀取配置檔案,測試列印各種型別的日誌。可以看出使用配置檔案的方式列印日誌,程式結構很清晰。

import logging.config
logging.config.fileConfig('logging.conf')

# create logger
logger = logging.getLogger()

logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

執行Python程式,控制檯和日誌檔案輸出以下內容:

2020-11-03 20:50:49,434 simple_example.py INFO - info message
2020-11-03 20:50:49,435 simple_example.py WARNING - warn message
2020-11-03 20:50:49,435 simple_example.py ERROR - error message
2020-11-03 20:50:49,435 simple_example.py CRITICAL - critical message

參考資料

https://docs.python.org/zh-cn/3/howto/logging.html#logging-advanced-tutorial 進階日誌教程

相關文章