Конфигурация ведения журналов в Django звездообразная нотация
Допустим, у меня есть следующая конфигурация журнала Django:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {
"class": "logging.StreamHandler",
},
},
"root": {
"handlers": ["console"],
"level": "WARNING",
},
"loggers": {
"django": {
"handlers": ["console"],
"level": "INFO",
"propagate": False,
},
"app1.management.commands": {
"handlers": ["console"],
"level": "DEBUG",
"propagate": False,
},
"app2.management.commands": {
"handlers": ["console"],
"level": "DEBUG",
"propagate": False,
},
"app3.management.commands": {
"handlers": ["console"],
"level": "DEBUG",
"propagate": False,
},
},
}
Обратите внимание, как я повторяю одну и ту же конфигурацию для всех команд управления приложениями. Я бы хотел иметь возможность объединить их в одну запись, например, так:
"*.management.commands": {
"handlers": ["console"],
"level": "DEBUG",
"propagate": False,
}
Но, похоже, это не работает. Возможно ли это или мне нужно повторить конфигурацию для всех приложений?
Конечно, вы можете построить соответствующий dict динамически, используя подход, подобный следующему:
from pprint import pprint
class DynamicLoggerDict(dict):
def __init__(self, data, common, apps):
super().__init__(data)
for app in apps:
key = f'{app}.management.commands'
self[key] = common
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"handlers": {
"console": {
"class": "logging.StreamHandler",
},
},
"root": {
"handlers": ["console"],
"level": "WARNING",
},
"loggers": DynamicLoggerDict({
"django": {
"handlers": ["console"],
"level": "INFO",
"propagate": False
}}, {
"handlers": ["console"],
"level": "DEBUG",
"propagate": False,
}, ['app1', 'app2', 'app3']),
}
pprint(LOGGING)
При запуске вышеприведенная команда печатает
{'disable_existing_loggers': False,
'handlers': {'console': {'class': 'logging.StreamHandler'}},
'loggers': {'app1.management.commands': {'handlers': ['console'],
'level': 'DEBUG',
'propagate': False},
'app2.management.commands': {'handlers': ['console'],
'level': 'DEBUG',
'propagate': False},
'app3.management.commands': {'handlers': ['console'],
'level': 'DEBUG',
'propagate': False},
'django': {'handlers': ['console'],
'level': 'INFO',
'propagate': False}},
'root': {'handlers': ['console'], 'level': 'WARNING'},
'version': 1}