Python - 如何将记录记录到控制台和标准输出

Python - How to log records to both console and stdout

我正在尝试用 Python logging 替换旧测试框架中的所有 print 语句。 我需要使用一种简单的 logging.debug('something') 方式将记录写入控制台和测试报告。 我正在为每个测试模块使用自定义记录器,如下所示:

logger.py

import logging
from sys import stdout


def setup_logger(filename):
    logger = logging.getLogger(filename)
    logger.setLevel(logging.DEBUG)
    stdout_handler = logging.StreamHandler(stdout)
    logger.addHandler(stdout_handler)
    
    return logger

test_file.py

from logger import setup_logger
logger = setup_logger(__name__)    
logger.debug('something')

目前我可以写入控制台,但是当我生成测试报告时,我在 sys.stdout 中看不到这些记录。我正在使用 HtmlTestRunner 来生成测试报告,看起来它没有从此处的测试接​​收标准输出记录:

self._stdout_data = sys.stdout.getvalue()

https://github.com/oldani/HtmlTestRunner/blob/master/HtmlTestRunner/result.py#L181

我对日志记录不是很熟悉,我不明白这里可能有什么问题。

sys.stdout 与我的自定义记录器写入消息的标准输出完全不同吗? 有解决这个问题的简单方法吗?

我阅读了其他关于此的类似问题(因此我的自定义记录器是在阅读这些内容后编写的)但我的问题有点不同,因为我使用的是解析 sys.stdout.[=16 的报告生成器=]

UPD: 或者也许我已经做对了,但我需要阅读的不是 sys.stdout 而是其他东西,以便在生成测试报告时找到我的记录?

UPD2: 发现了一个类似的老问题,但从未有人回答过)也许没有快速的解决方案( View passed testcases and show log messages in html report when using python html-testrunner??

看起来解决这个问题的唯一好方法是编写一个函数来做两件事:将日志添加到控制台(我最终只使用了 loguru - 简单明了)并打印相同的消息(这样做的唯一目的是支持旧的测试报告)。当然,有人也需要成功报告中的输出数据可能看起来很奇怪,但这不是我个人的选择)