Верьте или нет, у вас есть доступ к регистраторам этих базовых проектов! Поскольку вы находитесь в django, ваши настройки могут быть загружены, и регистрация может быть инициализирована, прежде чем будут созданы экземпляры регистраторов этих базовых проектов.
Это двухэтапный процесс. Первый шаг - определить регистратор, который является источником сообщения, которое вы хотите подавить. Чтобы сделать это, добавьте name
к my_formatter
:
"formatters": {
"my_formatter": {
"format": "[%(asctime)s] [%(name)s] %(message)s",
"datefmt": "%d/%b/%Y %H:%M:%S",
},
},
Как только мы нашли имя, мы можем определить наш фильтр.
import logging
class AwesomeFilter(logging.Filter):
def filter(self, rec):
if 'sensitive' in rec.msg:
return 0
# you may need to filter based on `getMessage()` if
# you can't find the information in the pre-formatted msg field
return 1
И теперь, когда вы знаете имя логгера, который выдает плохое сообщение, мы можем присоединить наш AwesomeFilter
к логгеру:
LOGGING_CONFIG = None
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"my_formatter": {
"format": "[%(asctime)s] [%(name)s] %(message)s",
"datefmt": "%d/%b/%Y %H:%M:%S",
},
},
"handlers": {
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "my_formatter",
},
},
"loggers": {
"my_logger": {
"handlers": ["console"],
"level": "DEBUG"
},
"name_of_logger_producing_bad_messages": {
"filters": [ "app.filters.AwesomeFilter", ],
},
},
}
logging.config.dictConfig(LOGGING)
Мы используем способ нахождения имени логгера, чтобы контролировать вывод логирования для сторонние библиотеки довольно часто. Удачи!