Перенаправить тестовый вывод Django из Logger в файл - PullRequest
0 голосов
/ 07 мая 2019

Я выполняю простой 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:

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.Также обратите внимание, что я в порядке использования регистратора по умолчанию, но я хочу определить регистр журнала ошибок только для тестовых случаев, и я не хочу, чтобы тестовый случай ошибки использовался по умолчанию.

1 Ответ

0 голосов
/ 08 мая 2019

почему бы не попробовать изменить уровень логгера и обработчика на ERROR? (больше информации в случае https://docs.djangoproject.com/en/2.2/topics/logging/#topic-logging-parts-loggers)

...