问题是
unittest跑步者在测试开始之前替换了
sys.stdout/
sys.stderr,并且
StreamHandler仍在写入原始内容
sys.stdout。
如果将“当前”分配给
sys.stdout处理程序,则它应该可以工作(请参见下面的代码)。
import sysimport unittestimport logginglogger = logging.getLogger()logger.level = logging.DEBUGstream_handler = logging.StreamHandler(sys.stdout)logger.addHandler(stream_handler)class TestCase(unittest.TestCase): def testSimpleMsg(self): stream_handler.stream = sys.stdout print("AA") logging.getLogger().info("BB")虽然,更好的方法是在测试期间添加/删除处理程序:
import sysimport unittestimport logginglogger = logging.getLogger()logger.level = logging.DEBUGclass TestCase(unittest.TestCase): def testSimpleMsg(self): stream_handler = logging.StreamHandler(sys.stdout) logger.addHandler(stream_handler) try: print("AA") logging.getLogger().info("BB") finally: logger.removeHandler(stream_handler)


