開發者可以通過三種方式配置日誌記錄:
- 呼叫配置方法的Python程式碼顯式建立記錄器、處理程式和格式化程式。
- 建立日誌配置檔案並使用
fileConfig()
函式讀取。 - 建立配置資訊字典並將其傳遞給
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 進階日誌教程