以下功能函数配置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。