gpt4 book ai didi

python-3.x - assertLogs 可以检查日志消息的格式吗?

转载 作者:行者123 更新时间:2023-12-03 17:37:46 24 4
gpt4 key购买 nike

我可以使用 Python 的 unittest assertLogs 来检查日志消息的格式吗?

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)

让我感到困惑的是“外部上下文”日志消息包含行号,但“我的消息 - 在上下文中”日志消息显示默认格式。

我目前的假设是 assertLogs 只检查一个 StreamHandler 并且(相当合理)它使用默认的 StreamHandler 和它的默认格式化程序 a_msg .要测试我的 Formatter 和 StreamHandlder,我需要另一种方法。

最佳答案

我自己也有这个确切的问题,我找到了 comment来自 nodakai很有帮助。
只是为了扩展这一点,我采用了以下技巧来测试我的日志消息格式:

from mylibrary import MY_LOGGING_FORMAT
from unittest import case
case._AssertLogsContext.LOGGING_FORMAT = MY_LOGGING_FORMAT
我在 MY_LOGGING_FORMAT 中定义的格式是我传入的 logging.Formatter(...) .这个黑客部队 assertLogs使用相同的格式。

关于python-3.x - assertLogs 可以检查日志消息的格式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44370513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com