将正常日志输出重定向是可行的:
所以输出不再被捕获。
我的猜测是这是因为 logging.basicConfig(**kwargs):通过创建具有默认格式化程序的StreamHandler并将其添加到根日志记录器,对日志系统进行基本配置。
import contextlib
import io
import logging
std_out_capture = io.StringIO()
with contextlib.redirect_stderr(std_out_capture):
logging.error('Hi.')
output = std_out_capture.getvalue()
print(f'output: {output}')
输出:
output: ERROR:root:Hi.
然而,当使用logging.basicConfig
更改日志格式时
import contextlib
import io
import logging
log_format = '[%(threadName)s] [%(levelname)s] %(message)s'
logging.basicConfig(format=log_format)
std_out_capture = io.StringIO()
with contextlib.redirect_stderr(std_out_capture):
logging.error('Hi.')
output = std_out_capture.getvalue()
print(f'output: {output}')
输出结果为:
output:
[MainThread] [ERROR] Hi.
所以输出不再被捕获。
我的猜测是这是因为 logging.basicConfig(**kwargs):通过创建具有默认格式化程序的StreamHandler并将其添加到根日志记录器,对日志系统进行基本配置。
(https://docs.python.org/3/library/logging.html#logging.basicConfig)
StreamHandler
在单独的线程中工作,因此其输出不会被捕获。
对于单元测试,我仍然希望能够捕获它。我该怎么做?