2017-12-05 12 views
0

私はlogging.configファイルを一度読み込み、pythonプロジェクトのすべてのモジュールに対して一度だけロガーを有効/無効にします。私は以下の方法を試しました:1. @staticmethodの使用2. Singeltonパターンの使用。これは、Pythonプロジェクト全体に対して一度だけロギングを初期化または設定するより良い方法ですか?Pythonセットアップのロギング設定は一度だけ

#Log.py 
import logging.config 
class Monitor(object): 

    fileName = path.join(path.split(path.dirname(path.abspath(__file__)))[0], "logging.config") 
    logging.config.fileConfig(fileName) 
    logger = logging.getLogger('root') 
    logger.disabled = True/False #set from some other config file 

    @staticmethod 
    def Log(logMessage): 
     Monitor.logger.info(logMessage) 

#Log1.py 
class Monitor(object): 

    # Here will be the instance stored. 
    __instance = None 

    def __init__(self): 
     if Monitor.__instance != None: 
      raise Exception("This class is a singleton!") 
     else: 
      Monitor.__instance = self 
      self.fileName = path.join(path.split(path.dirname(path.abspath(__file__)))[0], "logging.config") 
      logging.config.fileConfig(self.fileName) 
      logger = logging.getLogger('root') 
      logger.disabled = True/False #set via some config file 


    @staticmethod 
    def Log(logMessage): 
     if Monitor.__instance == None: 
      Monitor.__instance = Monitor() 
      Monitor.logger.info(logMessage) 
     else: 
      Monitor.logger.info(logMessage) 

答えて

0

セットアップ使っsingeltonパターン

#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) 
関連する問題