如何在python日志记录中在格式化程序之间切换?

2024-09-29 23:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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文件本身上实现这一点


Tags: namelogformatdefaultmessagehandlersloggerlevel
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:49

您可以使用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)

相关问题 更多 >

    热门问题