2013-07-12 4 views
0

У меня есть приложение Foo который перебирает точки входа, используя группу под названием foo.modules. Затем он загружает все случаи, используя метод load(). Эта архитектура позволяет писать плагины/модули для приложения foo и находится в более подробной информации here.как выполнять родительское протоколирование имен при импорте питона модулей из точек входа

Кроме того, приложение настраивает некоторые обработчики ведения журнала при его запуске. Когда я загрузить плагины однако (скажем foo_plugin), лесозаготовительной пространство имен Foo приложения не доступны в иерархии пространства имен, что приводит к предупреждениям, подобные этим:

No handlers could be found for logger "foo_plugin.plugin" 

Концепция в том, что тот, кто пишет плагин может просто написать:

import logging 
logger = logging.getLogger(__name__) 

и лесозаготовительной плагин должен работать как Foo диктата приложений.

Если я явно предварять Foo имен (foo.) перед переменной __name__, лесозаготовительной снова работает, но это не очень элегантно, конечно. Любые лучшие идеи?

ответ

0

Как плагин должен знать, является ли это частью приложения foo в отличие от приложения bar? Если вы не хотите, чтобы ваши плагины были частью пространства имен foo, вы можете просто привязать обработчики к корневому журналу, и вы не получите сообщение о «отсутствии обработчиков».

+0

Они не должны ... вы правы. Прежде чем экспериментировать с точками входа, я загружал плагины из подпакета внутри _foo_, который, конечно же, выполнял регистрацию _foo_. Это заставило меня смутить мысль о том, что плагины тоже должны быть, что неправильно. – tasos