2017-10-25 10 views
0

私はロギングを伴う複数のモジュールを持つpythonプロジェクトを持っています。私はメッセージのロギングを開始する前に、すべてのモジュールで初期化(ログ設定ファイルの読み取りとルートロガーの作成とログの有効化/無効化)を行います。この初期化を1回だけ実行することは可能ですか(あるクラスではログと呼ばれるように)、プロジェクト全体に同じ設定が再利用されるようにできますか? 私は適切な解決策を探しています。一度だけ設定ファイルを読んで、一度ロガーを取得し、クラスコンストラクタで、またはおそらく初期化子(init .py)を取得して設定してください。これはクライアント側(_main_function内)です。私はこのログの初期化と設定を別々のクラスで1回だけ行い、ロギングが必要なときにこのクラスを他のモジュールで呼び出す必要があります。複数モジュールのロガーを使ってロギングを設定する/初期化する方法は、プロジェクト全体でPythonで一度だけですか?

答えて

0

メインエントリポイントでログを初期化して設定することができます。このHowto(Python 2.7)のLogging from multiple modulesを参照してください。

0

セットアップ使っ@Singletonパターン

#log.py 
import logging.config 
import yaml 
from singleton_decorator import singleton 

@singleton 
class Log: 

    def __init__(self): 

     configFile = 'path_to_my_lof_config_file'/logging.yaml 

     with open(configFile) as f: 
      config_dict = yaml.load(f)  
     logging.config.dictConfig(config_dict) 
     self.logger = logging.getLogger('root') 

    def info(self, message): 
     self.logger.info(message) 

#module1.py 
from Log import Log  

myLog = Log() 
myLog.info('Message logged successfully) 



    #module2.py 
    from Log import Log  

    myLog = Log() #config read only once and only one object is created 
    myLog.info('Message logged successfully) 
関連する問題