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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章