选项1:
可以通过调用logging.disable来禁用日志记录。
logging.disable(logging.CRITICAL)
并重新打开
logging.disable(logging.NOTSET)
即使禁用了日志记录,像logger.info
这样的日志记录语句在到达isEnabledFor
方法之前仍会导致Python进行一些属性查找和函数调用。尽管如此,这可能已经足够。
选项2:
使用模拟:
class MockLogger(object):
def debug(msg, *args, **kwargs): pass
def info(msg, *args, **kwargs): pass
def warn(msg, *args, **kwargs): pass
def error(msg, *args, **kwargs): pass
def critical(msg, *args, **kwargs): pass
class Test(unittest.TestCase):
def test_func(self):
_logger1=testmodule.logger1
_logger2=testmodule.logger2
testmodule.logger1=MockLogger()
testmodule.logger2=MockLogger()
testmodule.logger1=_logger1
testmodule.logger2=_logger2
这样将会将日志记录语句的消耗时间减少到一个属性查找和一个(noop)函数调用所需的时间。如果这还不令人满意,我认为唯一剩下的选择是删除日志记录语句本身。
logging.disable(logging.FATAL)
,因为 OP 想要禁用所有日志记录,而不仅仅是较低级别的日志。 - Dima Tisnek