【问题标题】:Configuration file in Python for logging instead functionPython中的配置文件用于记录而不是功能
【发布时间】:2018-03-18 14:35:57
【问题描述】:

我有功能:

def go_logger(logfilename):
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    logging.basicConfig(filemode='a', datefmt='%m-%d-%Y %H:%M:%S')
    logger = logging.getLogger(logfilename)
    logger.setLevel(logging.DEBUG)
    handler = closehandler.ClosingHandler(os.path.join('/path/to/my/logs', logfilename),
                                          mode='a', encoding='utf-8')
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    return logger

我尝试替换方法:

def get_logger(logfilename):
    config_file = ('/path/to/my/config')
    logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False)
    logger = logging.getLogger("main")

我的配置:

[loggers]
keys=root

[handlers]
keys=fileHandler

[formatters]
keys=Formatter

[logger_root]
level=DEBUG
handlers=fileHandler
qualname=main

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=Formatter
args=('%(filename)s', 'a', 'utf8')

[formatter_Formatter]
format=%(asctime)s - %(levelname)s - %(message)s
datefmt="%Y-%m-%d %H:%M:%S"

但是没有创建带有日志的文件。当我使用函数时,一切正常。我试图替换配置上的功能,但它不起作用。我哪里有错误?你能帮帮我吗?

【问题讨论】:

    标签: python logging configuration config journal


    【解决方案1】:

    您的日志文件名不匹配。

    logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False)
    
    >>{'logfilename': logfilename}
    And
    >>args=('%(filename)s', 'a', 'utf8')
    

    你的文件处理程序应该是这样的

    [handler_fileHandler]
    class=FileHandler
    level=DEBUG
    formatter=Formatter
    args=('%(logfilename)s', 'a', 'utf8')
    

    【讨论】:

      【解决方案2】:

      您在配置文件中的filename 占位符与您传入的logfilename 键不匹配。使它们匹配,它可以工作。

      这是一个基于您的完整、可运行的示例:

      import logging.config
      
      
      def get_logger(logfilename):
          config_file = ('config.txt')
          logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False)
          logger = logging.getLogger("main")
          return logger
      
      logger = get_logger('scratch.log')
      logger.info('Hello, World!')
      

      当我用你的配置文件运行它时,我得到了这个错误:

      Traceback (most recent call last):
      File "/home/don/.IdeaIC2017.2/config/scratches/scratch.py", line 10, in <module>
      logger = get_logger('scratch.log')
      File "/home/don/.IdeaIC2017.2/config/scratches/scratch.py", line 6, in get_logger
      logging.config.fileConfig(config_file, defaults={'logfilename': logfilename}, disable_existing_loggers=False)
      File "/usr/lib/python2.7/logging/config.py", line 85, in fileConfig
      handlers = _install_handlers(cp, formatters)
      File "/usr/lib/python2.7/logging/config.py", line 161, in _install_handlers
      args = cp.get(sectname, "args")
      File "/usr/lib/python2.7/ConfigParser.py", line 623, in get
      return self._interpolate(section, option, value, d)
      File "/usr/lib/python2.7/ConfigParser.py", line 669, in _interpolate
      option, section, rawval, e.args[0])
      ConfigParser.InterpolationMissingOptionError: Bad value substitution:
      section: [handler_fileHandler]
      option : args
      key    : filename
      rawval : ('%(filename)s', 'a', 'utf8')
      

      错误的值替换意味着%(filename)s 不匹配任何内容。仔细看,你会发现你传入的默认值使用logfilename

      我将配置文件更改为这个,它可以工作:

      [loggers]
      keys=root
      
      [handlers]
      keys=fileHandler
      
      [formatters]
      keys=Formatter
      
      [logger_root]
      level=DEBUG
      handlers=fileHandler
      qualname=main
      
      [handler_fileHandler]
      class=FileHandler
      level=DEBUG
      formatter=Formatter
      args=('%(logfilename)s', 'a', 'utf8')
      
      [formatter_Formatter]
      format=%(asctime)s - %(levelname)s - %(message)s
      datefmt="%Y-%m-%d %H:%M:%S"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多