元の質問
パッケージレベルのロギングを正常に実装したパッケージqualysapiがありますが、ユーザーに対して透過的なモジュールレベルの粒度を探しています。このソリューションから実装をモデル化しました。
そのクラスを利用してそのロガーを追加する「ユーザー」モジュールのパッケージレベルのロギングを実装しようとしています。ユーザーモジュールはパッケージ名を追加するだけでよく、パッケージに含まれるモジュールを知る必要はないと思います。
以下は私がこれまでに持っているものです(簡略化):
パッケージ/____init____.py:
from package_name.util import connect
パッケージ/util.py:
import logging
import package_name.module_class
logger = logging.getLogger(package_name)
def connect():
return module_class.ClassName()
パッケージ/module_class.py:
class ClassName:
def __init__(self):
package_name.util.logger.info("Created instance.")
ユーザー.py:
import logging
import package_name
# My logging.
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# Log package_name.
logger_pkg = logging.getLogger('package_name')
logger.addHandler(logger_pkg)
# Define a Handler which writes to the sys.stderr.
logger_console = logging.StreamHandler()
logger.addHandler(logger_console)
モジュール レベルのパッケージ ログを許可しながら、ユーザーの使いやすさを維持するためのベスト プラクティスを知りたいです。
更新 1
私はそれを間違っています。質問を何が起こるべきかに変えます。
ユーザーがそのパッケージのすべてのモジュールのすべてのロガー ハンドラーのパッケージ名を追加するだけで済むように、複数のモジュールを含むパッケージを設定するにはどうすればよいですか? 以下のユーザーモジュールの例:
import logging, package_name
logger = logging.getLogger(__name__)
logger_pkg = logging.getLogger('package_name')
logger.addHandler(logger_pkg)