【发布时间】:2011-03-03 02:20:21
【问题描述】:
我使用标准的 python 日志记录模块。当我打电话给python manage.py test 时,我想在运行所有测试之前禁用日志记录。有没有可以用来调用 logging.disable 的信号或其他类型的钩子?或者在运行python manage.py test 时是否有其他方法可以禁用日志记录?
【问题讨论】:
我使用标准的 python 日志记录模块。当我打电话给python manage.py test 时,我想在运行所有测试之前禁用日志记录。有没有可以用来调用 logging.disable 的信号或其他类型的钩子?或者在运行python manage.py test 时是否有其他方法可以禁用日志记录?
【问题讨论】:
【讨论】:
作为一种简单的替代方法,您可以在设置文件中运行测试时禁用日志记录,如下所示:
if 'test' in sys.argv:
logger.removeHandler(handler)
logger.setLevel(logging.ERROR)
【讨论】:
我用过的最简单的东西:
import logging
class MyTestClass(TestCase):
def setUp(self):
logging.disable(logging.CRITICAL)
这不需要编辑、修补、额外安装等。所有日志记录已完全关闭。
【讨论】:
我更喜欢使用单独的 settings_test.py 运行测试,我可以在其中删除不必要的应用程序、中间件和其他我在测试期间不需要的东西。我也可以通过这种方式在这里禁用日志输出:
from settings import *
import logging
# direct all logging output to nowhere
class NullHandler(logging.Handler):
def emit(self, record):
pass
logging.getLogger().addHandler(NullHandler())
【讨论】:
我知道的唯一方法是编辑 manage.py 本身...当然不是很优雅,但至少它应该让你到达你需要的地方。
【讨论】:
我修补了test_extensions 也可以做到这一点。
【讨论】:
如果您使用的是django-nose,那么您可以将以下 sn-p 添加到您的settings.py 文件中,以在运行./manage.py test 时禁用日志输出
NOSE_ARGS = [
'--nologcapture'
]
【讨论】: