【问题标题】:How to switch between formatters in python logging?如何在 python 日志记录中的格式化程序之间切换?
【发布时间】:2021-02-15 18:44:14
【问题描述】:

我已经定义了一个记录器配置 -

logconfig: dict = {
        'version': 1,
        'formatters': {
            'default': {
                'format': '[%(asctime)s][%(name)s][%(levelname)s] %(message)s',
                'datefmt': '%Y-%m-%dT%H:%M:%S%z'
            },
            'withuuid': {
                'format': '[%(asctime)s][%(name)s][%(levelname)s] %(message)s (message2)s',
                'datefmt': '%Y-%m-%dT%H:%M:%S%z'
            }
        },
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
                'formatter': 'default'
            }
        },
        'loggers': {
            '': {  # root logger
                'level': log_level,
                'handlers': ['console']
            },
            'prm_example_agent': {  # Our module
                'level': log_level,
                'handlers': ['console'],
                'propagate': False
            },
            'prm': {  # The PRM library
                'level': log_level,
                'handlers': ['console'],
                'propagate': False
            }
        }
    }

这是我的 py 文件中的示例日志行。 self.logger.info("Destroying fgs " + resource.metadata.id)。 这是默认选择默认格式化程序。我想改用我自己的withuuid 格式化程序。如何在 py 文件本身实现这一点?

【问题讨论】:

    标签: python python-3.x logging


    【解决方案1】:

    您可以使用logging.setFormatter() 将新格式“推送”和“弹出”到streamHandler。假设您设置了一个 self.log,并且说只有一个流处理程序,您可以这样做

    # Assuming self.log exists, and is setup
    oldFormatter = self.log.handlers[0].formatter # get the old formatter
    self.log.handlers[0].setFormatter(newFormat) # push the new format
    self.log.info("Very informative message")
    self.log.handlers[0].setFormatter(oldFormat) # push the old formatter back on
    

    封装在一个处理多个流处理程序的好函数中:

    def logWithFormatter(logger, newFormatter, message):
        for i in range(len(logger.handlers)):
            oldFormatter = logger.handlers[i].formatter
            logger.handlers[i].setFormatter(newFormatter)
            logger.info(message)
            logger.handlers[i].setFormatter(oldFormatter)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2021-05-06
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2014-06-26
      相关资源
      最近更新 更多