2010-06-12 62 views
7

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

回答

2

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

+0

阿当添加到您的settings.py文件以禁用日志输出,我没有想到的是(...很明显嘛) 。谢谢! – 2010-06-13 13:20:33

+0

@Eric,不客气! – 2010-06-13 14:17:43

9

作为一个很不错的选择,你可以运行在您的设置测试时,禁用日志文件是这样的:

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

谢谢 - 像魅力一样工作! – 2010-12-16 10:51:59

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()) 
12

其实是有一个更好的方法来做到这一点,与django-nose有一个kwarg:

只要运行:

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

./manage.py:error:no such option:--logging-clear-handlers – 2012-12-18 11:21:45

+1

确实,我没有指定,但你需要django-nose:https://github.com/jbalogh/django-鼻子和https://nose.readthedocs.org/zh-CN/latest/usage.html?highlight=#cmdoption--logging-clear-handlers – Rmatt 2012-12-19 17:52:04

5
我用

最简单的事情:

import logging 

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

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

0

如果使用django-nose,那么你可以下面的代码片段运行./manage.py test

NOSE_ARGS = [ 
    '--nologcapture' 
]