Регистрация Django только для моих приложений
По умолчанию я могу включить logging in settings.py в конфигурации SETTINGS, создав logger ""
, который будет захватывать все. Но что делать, если я хочу видеть только записи из моих проектных приложений, а не внутренних компонентов Django?
Я могу представить, как явным образом получаю регистратор в каждом из модулей приложения Django и называя его каким-то соглашением, например. logging.getLogger("myproject." + __file__)
. Затем я могу создать журнал, называемый "myproject" (в SETTINGS), который собирает все эти данные для вывода. Я бы предпочел не жестко указывать имя моего проекта, поэтому я бы сделал некоторую логику os.path на ___file___
, чтобы извлечь полное пространство имен до файла на любой произвольной глубине.
В этот момент я останавливаюсь и удивляюсь, есть ли более простой способ?
Ответы
Ответ 1
Не уверен, что я полностью понял ваш вопрос, потому что ответ кажется слишком простым.
Предполагая, что вы определили в LOGGING
обработчик для ваших проектных приложений, например:
'handlers': {
'handler_for_my_apps': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'debug.log',
},
и учитывая ваши приложения app1
, app2
, и поэтому вы можете иметь все журналы из этих приложений без каких-либо внутренних журналов Django, определяя регистраторы:
'loggers': {
'app1': {
'handlers': ['handler_for_my_apps'],
'level': 'DEBUG',
},
'app2': {
'handlers': ['handler_for_my_apps'],
'level': 'DEBUG',
},
В одном файле не будет журналов Django, если, конечно, вы не определили регистратор с именем django
с обработчиком handler_for_my_apps
.
В ваших приложениях вы можете получить регистратор, используя logging.getLogger(__name__)
, как рекомендовано документами.
Если я не понял ваш вопрос...
Ответ 2
Вы можете использовать следующую схему для создания одинаковых журналов для всех ваших локальных приложений без необходимости вручную добавлять их в конфигурацию ведения журнала.
Сначала отделите локальные приложения:
LOCAL_APPS = [
'myapp1',
'myapp2',
...
]
THIRD_PARTY_APPS = [
'django. ...',
...
]
INSTALLED_APPS = LOCAL_APPS + THIRD_PARTY_APPS
Затем создайте конфигурацию регистратора для локальных приложений:
local_logger_conf = {
'handlers': ['my_handler',],
'level': 'DEBUG',
}
Наконец, определите свои регистраторы следующим образом:
'loggers': { app: copy.deepcopy(local_logger_conf) for app in LOCAL_APPS }