2016-01-27 3 views
0

У меня, надеюсь, простой вопрос о регистрации python/django.Определение регистраторов python для общих модулей

Я пишу приложение Django, которое вызывает определенные модули, которые совместно с другими процессами, заданиями, сценариями и, возможно, даже некоторыми другими приложениями в свое время - например, общие вычисления.

Я настроил протоколирование для моего приложения Django в settings.py, а затем в моих основных приложениях модулей (views.py и т.д.) Я получаю регистратор с помощью:

logger = logging.getLogger('exampleApp') 

Все работает, как ожидалось.

Однако, когда мое приложение вызывает модули в других общих пакетах, я, очевидно, не хочу иметь тот же вызов logging.getLogger ('exampleApp'), потому что тогда другие процессы, которые используют этот модуль, будут использовать неправильную конфигурацию журнала.

Кроме того, используя

logging.getLogger(__name__) 

означает, что, когда я называю этот модуль из моего приложения Django, он не регистрируется на правильный файл.

Итак, мой вопрос в том, что для общих модулей есть ли способ, с помощью которого регистратор может использовать экземпляр в «родительском вызывающем», другими словами, приложение Django или автономный серверный процесс или сценарий и т. Д.? Или это так же просто, как передать экземпляр журнала в классы, определенные в модуле (в качестве параметра в конструкторе)?

Надеюсь, что имеет смысл.

Спасибо.

+0

Рассмотрите возможность использования современной платформы регистрации ошибок и агрегации, такой как [часовой] (https://pypi.python.org/pypi/sentry), система комментариев недостаточно велика для описания преимуществ. –

ответ

1

так, как я получил эту работу, не проходя вокруг объектов регистратора, чтобы изменить

logger = logging.getLogger('exampleApp') 

в модуле верхнего уровня для

logger = logging.getLogger() 

так, что он на самом деле получает root регистратор , Этот формат корневого регистратора будет сопровождаться другими модулями.

Смежные вопросы