我已经定义了一个记录器配置 -
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 文件本身实现这一点?
答案 0 :(得分:0)
您可以使用 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)