将记录器的Django测试输出重定向到文件

时间:2019-05-07 17:03:28

标签: django python-2.7 python-logging

我正在执行一个简单的Python Django TestCase。问题很简单:我想使用记录器将信息(stdout)重定向到一个文件,将失败/错误(stderr)重定向到另一个文件。

我知道我只需定义记录器并使用它来打印消息即可将stdout打印到文件(即logger.info('my debug message'));但是,我还没有找到记录故障/错误的方法。我可以使用Bash重定向整个测试运行的输出(我半成功),但是我知道有一种方法可以简化它,并使用记录器为我完成所有后端工作。

这是我的记录器的一个示例:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s, %(module)s at line %(lineno)d:\n%(message)s'
        },
    },
    'handlers': {
        'app': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logs/app.log',
            'formatter': 'verbose'
        },
        'test': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': 'logs/test.log',
            'formatter': 'verbose'
        },
        'test-fail': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            'filename': 'logs/test-fail.log',
            'formatter': 'verbose',
        }
    },
    'loggers': {
        'app': {
            'handlers': ['app'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'test': {
            'handlers': ['test', 'test-fail'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

我们只想尝试将以下测试用例记录到记录器中指定的 logs / test-fail.log 文件中:

logger = logging.getLogger('test')

def test_this(self):
   logger.debug('This message will print to the logs/test.log file')
   self.assertTrue(False) # will fail

简而言之,我想使用记录器从Django TestCase打印错误/失败,而使用Bash打印 not 。另外请注意,我可以使用默认记录器,但我只想为测试用例定义一个错误记录器用例,并且我不希望默认使用测试错误用例。

1 个答案:

答案 0 :(得分:0)

为什么不尝试将记录器和处理程序级别更改为ERROR? (更多信息,以防link2