【问题标题】:Disable logging during manage.py test?在 manage.py 测试期间禁用日志记录?
【发布时间】:2011-03-03 02:20:21
【问题描述】:

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

【问题讨论】:

    标签: python django logging


    【解决方案1】:

    实际上有一个更好的方法可以做到这一点,django-nose 有一个 kwarg:

    只要运行:

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我用过的最简单的东西:

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

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

      【讨论】:

        【解决方案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())
        

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 啊,我没想到这一点(……很明显)。谢谢!
          【解决方案6】:

          我修补了test_extensions 也可以做到这一点。

          【讨论】:

            【解决方案7】:

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

            NOSE_ARGS = [
                '--nologcapture'
            ]
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-04-30
              • 1970-01-01
              • 2018-01-17
              • 1970-01-01
              • 1970-01-01
              • 2016-11-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多