標籤:python logging
以下功能函數配置logging模組。它們位於logging.config模組中。它們的使用是可選的 - 可以使用這些功能函數配置logging模組;或者通過調用主API(logging中定義)並且定義在logging或logging.handlers中定義的handlers。
logging.config.dictConfig(config):
從字典擷取logging配置。
logging.config.fileConfig(fname, defaults=None, disable_existing_loggers=True):
從一個configparser格式命名為fname的檔案中讀取logging配置。
配置字典:
傳遞給dictConfig()的字典必須包含以下關鍵字:
version:被設定為表示模式版本的整數值,目前唯一有效值為1
formatters:值是字典類型,其中每個key是一個formatter id,每一個value是一個字典並描述如何配置相應的Formatter執行個體
filters:值是字典類型,其中每個key是一個過濾器,每一個value是一個字典並描述如何配置相應的Filter執行個體
handlers:值是字典類型,每個key是一個handler id,每個value是一個描述如何配置相應Handler執行個體的字典
handlers配置字典搜尋以下key:
class(強制):handler類的完整描述名
level(可選):handler等級
formatter(可選):用於該handler的formatter id
filters(可選):用於該handler的filter id的列表
loggers:值是字典類型,其中每個key是一個logger名,每個value是一個描述配置相應Logger執行個體的字典
root:root logger的配置。配置的處理將和任何logger一樣,除了propagate不適用
incremental:是否配置被解釋為已存在配置的增量。預設False
disable_existing_loggers:是否任何已存在的logger都被禁止。預設True,如果incremental為True,該值被忽略
看一個實際的logging設定檔:
version: 1formatters: simple: format: ‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘handlers: console: class: logging.StreamHandler level: DEBUG formatter: simple stream: ext://sys.stdout info_file_handler: class: logging.handlers.RotatingFileHandler level: INFO formatter: simple filename: info.log maxBytes: 10485760 backupCount: 3 encoding: utf8 error_file_handler: class: logging.handlers.RotatingFileHandler level: ERROR formatter: simple filename: error.log maxBytes: 10485760 backupCount: 3 encoding: utf8loggers: simpleExample: level: DEBUG handlers: [console] propagate: noroot: level: DEBUG handlers: [console, info_file_handler, error_file_handler]
定義了一個名稱為‘simple‘的formatter
定義了三個handler:‘console‘, ‘info_file_handler‘, ‘error_file_handler‘
定義了一個logger:‘simpleExample‘
定義了一個root
預設logger使用root的配置,例如常用的logging.getLoggeer(__name__),由於__name__對應的logger沒有在設定檔中定義,因此建立預設root的配置的logger執行個體,其包括三個handler:console,info_file_handler,error_file_handler,相應的日誌也會輸出到三個handler定義的目的地。如果調用logging.getLoggeer(‘simpleExample‘),則建立設定檔中匹配的名稱為‘simpleExample‘的logger執行個體,其handler為console,即在console輸出日誌。
logging.handlers.RotatingFileHandler可以實現記錄檔自動迴圈覆蓋的功能,如果需要實現記錄檔變更後(例如被刪除)自動產生,則需要使用logging.handlers.WatchedFileHandler,目前看沒有找到同時具備上述兩個功能的handler。
python logging模組配置方法淺析