0

foo.modulesという名前のグループを使用してエントリポイントを反復処理するアプリケーションfooがあります。次に、 load()メソッドを使用して出現箇所をロードします。このアーキテクチャにより、アプリケーションfooのプラグイン/モジュールを作成できます。詳細については、こちらを参照してください。

また、アプリケーションは起動時にいくつかのロギング ハンドラーを構成します。ただし、プラグインをロードすると (たとえばfoo_plugin)、fooアプリケーションのロギング名前空間が名前空間階層で使用できなくなり、次のような警告が表示されます。

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

コンセプトは、プラグインを書く人は誰でも書くことができるということです:

import logging
logger = logging.getLogger(__name__)

プラグインのロギングは、fooアプリケーションの指示どおりに機能するはずです。

変数の前にfoo名前空間 ( foo.)を明示的に追加する__name__と、ログは再び機能しますが、もちろんこれはあまり洗練されたものではありません。より良いアイデアはありますか?

4

1 に答える 1