在manage.py测试期间禁用日志记录?

时间:2010-06-12 22:11:10

标签: python django logging

我使用标准的python日志记录模块。当我调用python manage.py test时,我想在运行所有测试之前禁用日志记录。是否有信号或其他类型的钩子我可以用来调用logging.disable?或者是否有其他方法可以在python manage.py test运行时禁用日志记录?

7 个答案:

答案 0 :(得分:12)

实际上有一种更好的方法,django-nose有一个kwarg:

跑步:

./bin/manage.py test --logging-clear-handlers

答案 1 :(得分:9)

作为一种简单的替代方法,您可以在设置文件中运行测试时禁用日志记录,如下所示:

if 'test' in sys.argv:
    logger.removeHandler(handler)
    logger.setLevel(logging.ERROR)

答案 2 :(得分:6)

我用过的最简单的事情:

import logging

class MyTestClass(TestCase):
    def setUp(self):
        logging.disable(logging.CRITICAL)

这不需要编辑,修补,额外安装等。所有日志记录都完全关闭。

答案 3 :(得分:4)

我更喜欢使用单独的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())

答案 4 :(得分:2)

我所知道的唯一方法是编辑manage.py本身...当然不是很优雅,但至少应该让你到达你需要的地方。

答案 5 :(得分:1)

我修补test_extensions也是这样做的。

答案 6 :(得分:0)

如果您使用的是django-nose,那么您可以将以下代码段添加到settings.py文件中,以便在运行./manage.py test时禁用日志记录输出

NOSE_ARGS = [
    '--nologcapture'
]