【问题标题】:Python Logging: dictConfigPython 日志记录:dictConfig
【发布时间】:2012-12-10 17:23:23
【问题描述】:

我正在尝试使用配置文件来配置 Python 日志记录,而且还在加载 dict 配置后添加处理程序。所以我的配置文件就像

version: 1
formatters:
  default_formatter:
    format: '%(asctime)s : %(levelname)s : %(message)s'
    datefmt: '%d-%b-%Y %H:%M:%S'
  plain_formatter:
    format: '%(message)s'
handlers:  
  console_default_handler:
    class: logging.StreamHandler
    level: INFO
    formatter: default_formatter
    stream: ext://sys.stdout  
root:
  level: INFO
  handlers: [console_default_handler]

然后在代码中 - 我愿意

log_config_dict=yaml.load(open(log_config_file, 'r'))
logging.config.dictConfig(log_config_dict)

我想以这种方式添加记录器 -

fhandler1=logging.FileHandler(log_file_name,mode="w")
fhandler1.setFormatter(log_config_dict['formatters']['plain_formatter'])
fhandler1.setLevel(logging.DEBUG)

这不起作用。请问有什么方法可以获取 dictConfig 中定义的获取值,以便在我的手动日志配置中使用它们?

谢谢

【问题讨论】:

    标签: python logging


    【解决方案1】:

    哦,我想通了。我需要做的是

    formatter =logging.Formatter(log_config_dict['formatters']['plain_formatter']['format'])             
    fhandler1.setFormatter(formatter)
    

    所以,我需要创建一个 Formatter 对象。

    【讨论】:

      【解决方案2】:
      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      
      import logging
      import logging.handlers
      from logging.config import dictConfig
      
      logger = logging.getLogger(__name__)
      
      DEFAULT_LOGGING = {
          'version': 1,
          'disable_existing_loggers': False,
      }
      def configure_logging(logfile_path):
          """
          Initialize logging defaults for Project.
      
          :param logfile_path: logfile used to the logfile
          :type logfile_path: string
      
          This function does:
      
          - Assign INFO and DEBUG level to logger file handler and console handler
      
          """
          dictConfig(DEFAULT_LOGGING)
      
          default_formatter = logging.Formatter(
              "[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s():%(lineno)s] [PID:%(process)d TID:%(thread)d] %(message)s",
              "%d/%m/%Y %H:%M:%S")
      
          file_handler = logging.handlers.RotatingFileHandler(logfile_path, maxBytes=10485760,backupCount=300, encoding='utf-8')
          file_handler.setLevel(logging.INFO)
      
          console_handler = logging.StreamHandler()
          console_handler.setLevel(logging.DEBUG)
      
          file_handler.setFormatter(default_formatter)
          console_handler.setFormatter(default_formatter)
      
          logging.root.setLevel(logging.DEBUG)
          logging.root.addHandler(file_handler)
          logging.root.addHandler(console_handler)
      
      
      
      [31/10/2015 22:00:33] [DEBUG] [yourmodulename] [yourfunction_name():9] [PID:61314 TID:140735248744448] this is logger infomation from hello module
      

      我觉得带函数的config log更方便。

      【讨论】:

        猜你喜欢
        • 2017-06-04
        • 2016-08-15
        • 1970-01-01
        • 2011-08-18
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多