組み込みのロギングモジュールを利用するマルチスレッドのPythonアプリケーションがあります。StreamHandler
ロギングレベルを制御し、将来的にとの交換を容易にするためにFileHandler
、各モジュールによって呼び出される共通のヘルパー関数を作成して、(名前以外の)同一のロガーを作成しました。
この問題のトラブルシューティングはどのようにすればよいですか?
キーポイント
- プロジェクトの各モジュールには、独自のロガーインスタンスがあります。
- サンプル出力は、ロガーへの1回の呼び出しによって生成されます(
self._logger.info("Logger Setup")
) - 現在のスレッド名(
threading.Thread.getName()
)を含めてみましたが、同じスレッドが呼び出していることで複数のログが発生していることが確認されました。
ロガーの作成-現在機能中
import logging
import sys
def createSystemLogHandler(logger):
# This is now called once at the logger's root
ch = logging.StreamHandler(sys.stdout) # Normal output is to stderr which doesn't show up on Window's CMD
format = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
ch.setFormatter(format)
logger.addHandler(ch)
return logger
def configureSystemLogger(name='', level=logging.WARNING):
logger = logging.getLogger(name)
logger.setLevel(level)
logger.info("Logger Setup")
return logger
サンプル出力
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup
2012-04-25 21:59:40,720 - INFO - HW_MGR - Logger Setup