我可以使用Python的unittest assertLog来检查日志消息的格式吗?
def test_log_format(self):
h.config_common_log(level=logging.DEBUG)
h.get_log().debug('outside context')
with self.assertLogs(level=logging.DEBUG) as a_log:
h.get_log().debug('my_message - incontext')
self.assertRegex(a_log.output[0], ':\d+:my_message') # This fails
# This shows the log data itself is correct, just the output message is wrong
print('a_log.ouput={}\ta_log={!s}'.format(a_log.output, a_log))
# This was added to learn varying the logger would help. It did not.
def get_log():
return logging.getLogger()
def config_common_log(level=logging.WARNING):
get_log().setLevel(level)
ch = logging.StreamHandler()
ch.setFormatter(logging.Formatter('%(module)s:%(funcName)s:%(lineno)s:%(message)s')) # Despite this format statement.
get_log().addHandler(ch)
让我感到困惑的是外界背景'日志消息包括行号,但是“我的消息 - 在上下文中”#39;日志消息显示默认格式。
我目前的假设是assertLogs只检查一个StreamHandler并且(非常合理地)它使用默认的StreamHandler及其a_msg
的默认格式化程序。要测试我的Formatter和StreamHandlder,我需要另一种方法。
答案 0 :(得分:0)