首页 > 代码库 > python logging模块配置方法浅析
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: 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。
python logging模块配置方法浅析