Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-测试失败时的日志记录_Python_Django_Logging_Console - Fatal编程技术网

Python Django-测试失败时的日志记录

Python Django-测试失败时的日志记录,python,django,logging,console,Python,Django,Logging,Console,我在中有很多单元测试,如果测试失败,我通常需要查看日志(如果可能,在控制台中)。我无法真正使用日志文件,因为它变得非常混乱。 我现在要做的是:在settings.py中激活控制台日志记录,并且只运行一个特定的测试。我希望有一个更方便的方法来做这件事。我只想查看失败测试的日志,而不是完整的日志 编辑:即使发布了答案——我已经接受了——我也不太满意。我只想看到失败测试的日志输出。我一直在寻找一个像这样的解决方案。它捕获完整的输出(用于记录+打印),并仅在测试失败时将其写入标准输出 将根记录器设置为仅

我在中有很多单元测试,如果测试失败,我通常需要查看日志(如果可能,在控制台中)。我无法真正使用日志文件,因为它变得非常混乱。
我现在要做的是:在
settings.py
中激活控制台日志记录,并且只运行一个特定的测试。我希望有一个更方便的方法来做这件事。我只想查看失败测试的日志,而不是完整的日志


编辑:即使发布了答案——我已经接受了——我也不太满意。我只想看到失败测试的日志输出。我一直在寻找一个像这样的解决方案。它捕获完整的输出(用于记录+打印),并仅在测试失败时将其写入标准输出

将根记录器设置为仅在运行测试时使用控制台处理程序。最简单的检测方法是查看“test”是否是第二个argv参数。确保所有感兴趣的日志记录器都具有
“propagate”:True
,以便将日志转发到根日志记录器

# settings.py
import sys

if sys.argv[1] == 'test':
    LOGGING['root'] = {
        'handlers': ['console'],
        'level': 'DEBUG',
    }

嗯,我刚刚想出了如何修复它。
显然有一个
-b
选项“缓冲输出”,除非在运行单元测试时测试失败。如果tests.py文件执行
unittest.main()
,则使用起来非常简单。只需键入
python tests.py-b
,除非测试失败,否则整个输出将被缓冲

...........F
Stdout:
OK :)
OK :)

======================================================================
FAIL: testStr (__main__.MyTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "tests.py", line 93, in testStr
    self.fail()
AssertionError: None

Stdout:
OK :)
OK :)

----------------------------------------------------------------------
Ran 12 tests in 0.005s

在本例中,每个测试都会向stdout打印一些内容,但只打印最后一个(显示失败的一个)。由于日志也可以打印到控制台(请参阅@Thomas的答案),因此您只能看到相关日志。

在控制台上访问日志输出的快捷方式是使用monkey patch logging。。要覆盖logging.info,例如:

def monkey_print(*args):
   print args
setattr(logging, 'info', monkey_print)

然后在完成后删除它。又快又脏。它也适用于unittest。

您是否在代码中添加了一些“打印”命令?@brunofitas否,我使用python的日志模块。我通常使用“打印”命令,在本地运行时效果良好。打印和错误显示在服务器窗口上,通常我不需要其他任何东西。@brunofitas好吧,如果我一直在代码中使用打印,我也会看到所有单元测试的打印输出。此外,打印被MOD_WSGI丢弃,因此,我无法切换到打印语句。我也不能用这种方式捕获SQL日志(这也很有帮助)。但我只想查看所有失败测试的日志。使用这段代码,我得到了太多的日志输出,我几乎看不到哪些日志失败。因此,只需重新运行失败的测试并记录日志输出。截至2月16日,django似乎不支持这一点: