2013-07-12 6 views
0

내가 foo.modules라는 그룹을 사용하여 진입 점을 반복 처리하는 응용 프로그램 foo는이 부모 로깅 네임 스페이스를 존중합니다. 그런 다음 load() 메소드를 사용하여 어커런스를로드합니다. 이 아키텍처는 응용 프로그램에 대한 플러그인/모듈 작성을 허용합니다. foo 자세한 내용은 here에서 찾을 수 있습니다.어떻게

또한 응용 프로그램은 시작할 때 일부 로깅 처리기를 구성합니다. 나는 그러나 플러그인을로드 할 때 foo는 애플리케이션의 로깅 네임 스페이스는이 같은 경고에 이르게하는 네임 스페이스 계층 구조에서 사용할 수 없습니다 (의이 foo_plugin을 가정 해 봅시다) :

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

개념 누구가를 기록한다는 것입니다 플러그인은 쓸 수 있습니다 :

import logging 
logger = logging.getLogger(__name__) 

및 플러그인 로깅은 foo는 응용 프로그램의 지시로 작동합니다. 내가 명시 적으로 __name__ 변수 전에 foo는 네임 스페이스 (foo.)를 앞에 추가하면

는, 로깅이 다시 작동하지만,이 과정의 매우 우아하지 않습니다. 더 좋은 아이디어?

답변

0

플러그인이 응용 프로그램 foo과 응용 프로그램 bar의 일부인지 여부를 어떻게 알 수 있습니까? 플러그인을 foo 네임 스페이스에 포함시키지 않으려면 핸들러를 루트 로거에 연결하면 "처리기를 찾을 수 없습니다"라는 메시지가 표시되지 않습니다.

+0

그들은 .. 당신이 옳다고 생각하지 않습니다. 진입 점을 실험하기 전에 _foo_ 로거를 기리는 _foo_ 내부의 하위 패키지에서 플러그인을로드하고있었습니다. 그 때문에 플러그인이 너무 잘못되어야한다고 생각하게되었습니다. – tasos