ログシステムを設定したいPythonプログラム/ライブラリに取り組んでいます。基本的に、端末またはファイルにログを記録したいと考えています。そのために、標準ディストリビューションに組み込まれている優れたロギング パッケージを使用します。
ロギング レベルは、ユーザーが設定を介してカスタマイズできる必要があります。私の問題は、ロガーに接続されているハンドラーの 1 つを取得する方法ですか? 私はこのようなことを少し考えていました:
import logging
class NullHandler(logging.Handler):
def emit(self,record):
pass
HANDLERS = {}
HANDLERS['console'] = logging.StreamHandler()
HANDLERS['logfile'] = logging.FileHandler('test.log','w')
logging.getLogger().addHandler(NullHandler())
logging.getLogger('console').addHandler(HANDLERS['console'])
logging.getLogger('logfile').addHandler(HANDLERS['logfile'])
def set_log_level(handler, level):
if hanlder not in HANDLERS:
return
HANDLERS[handler].setLevel(level)
def log(message, level, logger=None):
if logger is None:
logger= HANDLERS.keys()
for l in logger:
logging.getLogger(l).log(level, message)
ご覧のとおり、私の実装では、作成したハンドラーのインスタンスを格納するために HANDLERS グローバル ディクショナリを使用することが暗示されています。そうするためのより良い方法を見つけることができませんでした。その設計では、ロガーごとに 1 つのハンドラーをプラグインしただけなので、ロガー オブジェクトのハンドラー属性は問題ないはずですが、もっと一般的なものを探しています (つまり、ある日に複数のハンドラーがプラグインされた場合の対処方法)。私のロガーの1つに?)
これについてあなたはどう思いますか ?
どうもありがとうございます
エリック