以下功能函數配置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: 1 formatters: 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: utf8 loggers: simpleExample: level: DEBUG handlers: [console] propagate: no root: 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。