Я тестирую некоторые модели Django с бокс-standerd django.test.Testcase. Мой models.py записывает в журнал отладки, используя следующий код инициализации:Как остановить регистрацию в Django unittests от печати до stderr?
import logging
logger = logging.getLogger(__name__) # name is myapp.models
и затем я пишу в журнал с:
logger.debug("Here is my message")
В моем settings.py, я создал один FileHandler и журнал для myapp, используя этот обработчик и только этот обработчик. Отлично. Я вижу сообщения в этом журнале. Когда я нахожусь в оболочке Django, я вижу только .
Когда, однако, я запускаю свой тестовый пакет, моя консоль тестового набора также видит все эти сообщения. Он использует другой форматтер, который я явно не определил, и он пишет stderr. У меня нет обработчика журнала, который записывает в stderr.
Я не хочу, чтобы эти сообщения спамали мою консоль. Я закрою свой файл журнала, если захочу увидеть эти сообщения. Есть ли способ остановить его? (Да, я мог бы перенаправить поток ошибок, но полезный вывод идет в стандартный вывод, а также.)
Edit: Я создал два обработчика в моем settings.py:
'handlers': {
'null': {
'level': 'DEBUG',
'class': 'django.utils.log.NullHandler',
},
'logfile' : {
'level':'DEBUG',
'class':'logging.FileHandler',
'filename':'%s/log/development.log' % PROJECT_DIR,
'formatter': 'simple'
},
},
и попытался это:
'loggers': {
'django': {
'level': 'DEBUG',
'handlers': ['null']
},
'myapp': {
'handlers': ['logfile'],
'level':'DEBUG',
},
... но поведение демпинга logging/stderr остается неизменным. Это похоже на то, что я получаю еще один обработчик журналов, когда я запускаю тесты.
Вы спрашиваете, как настроить ведение журнала специально для команды test или runtest? Вы пытались изменить свой 'settings.py'? –
Ведение журнала ведет себя по-разному, когда я запускаю тесты по сравнению с тем, когда я не являюсь. Я хочу, чтобы это остановилось. Я думаю, что logging config в settings.py, вероятно, хочет меняться; Я просто не знаю, что мне нужно изменить. Пробовал задавать обработчик django по умолчанию без везения. – Nate
Добавление некоторых ковычек в один из моих методов тестирования фактически только, кажется, делает вещи более запутанными. Если в моем тесте я делаю ml = logging.getLogger ('myapp.models'), у него, похоже, нет обработчиков (предполагается, что ml.handlers должны их перечислить). В этом контексте, однако, выполнение ml.debug («MESSAGE») записывается в файл журнала, но не stderr. Теперь я полностью озадачен. – Nate