Регистрация 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 }