我正在执行一个简单的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 。另外请注意,我可以使用默认记录器,但我只想为测试用例定义一个错误记录器用例,并且我不希望默认使用测试错误用例。