Чи є простий спосіб вимкнути журнал глобальним способом, щоб певні додатки не записували речі на консоль під час запуску тестів?
Інші відповіді заважають "виписувати речі на консоль", встановлюючи глобальну інфраструктуру для того, щоб ігнорувати що-небудь. Це працює, але я вважаю це занадто тупим підходом. Мій підхід полягає в зміні конфігурації, яка робить лише те, що потрібно, щоб журнали не виходили на консоль. Так що я додати користувальницький фільтр протоколювання до My settings.py
:
from logging import Filter
class NotInTestingFilter(Filter):
def filter(self, record):
# Although I normally just put this class in the settings.py
# file, I have my reasons to load settings here. In many
# cases, you could skip the import and just read the setting
# from the local symbol space.
from django.conf import settings
# TESTING_MODE is some settings variable that tells my code
# whether the code is running in a testing environment or
# not. Any test runner I use will load the Django code in a
# way that makes it True.
return not settings.TESTING_MODE
І я налаштовую протокол Django для використання фільтра:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'testing': {
'()': NotInTestingFilter
}
},
'formatters': {
'verbose': {
'format': ('%(levelname)s %(asctime)s %(module)s '
'%(process)d %(thread)d %(message)s')
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'filters': ['testing'],
'formatter': 'verbose'
},
},
'loggers': {
'foo': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': True,
},
}
}
Кінцевий результат: коли я тестую, на консоль нічого не йде, але все інше залишається таким же.
Навіщо це робити?
Я розробляю код, який містить інструкції реєстрації, які спрацьовують лише в конкретних обставинах і повинні виводити точні дані, які мені потрібні для діагностики, якщо все піде не так. Тому я перевіряю, що вони роблять те, що мають робити, і, таким чином, повністю відключити ведення журналу, для мене не під силу. Я не хочу знайти, якби програмне забезпечення вийшло у виробництво, те, що я думав , буде зареєстровано, не реєструється.
Більше того, деякі тестові бігуни (наприклад, Ніс) захоплюватимуть журнали під час тестування та видаватимуть відповідну частину журналу разом із тестом. Корисно з’ясувати, чому тест не вдався. Якщо ведення журналу повністю вимкнено, то нічого не можна зробити.