我正在执行一个简单的 Python Django TestCase。问题很简单:我想使用记录器将信息(stdout)重定向到一个文件,并将故障/错误(stderr)重定向到另一个文件。
我知道我可以简单地通过定义记录器并使用它来打印消息(即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
简而言之,我想使用记录器而不是使用 Bash 从 Django TestCase 打印错误/失败。另请注意,我可以使用默认记录器,但我想仅为测试用例定义错误记录器案例,并且我不希望默认使用测试错误案例。