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



我正在执行一个简单的python django testcase。问题很简单:我想使用登录器将信息(stdout(重定向到一个文件,而失败/错误(stderr(。

我知道我可以通过定义记录器并使用它来打印消息(即logger.info('my debug message')(来将STDOUT打印到文件上;但是,我尚未找到记录故障/错误的方法。我可以使用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

简而言之,我想使用logger和不是使用bash从django测试柜上打印错误/失败。另请注意,我可以使用默认记录器,但是我想仅针对测试用例定义错误记录器案例,而且我不希望默认使用测试错误案例。

为什么不尝试将记录器和处理程序级别更改为错误?(有关更多信息,例如https://docs.djangoproject.com/en/2.2/topics/logging/#topic-logging-parts-loggers(

最新更新