2017-12-05 20 views
0

로깅 설정 파일을 한 번만 읽고 파이썬 프로젝트의 모든 모듈에 대해 로거를 한 번만 활성화/비활성화합니다. 나는 다음과 같은 방법을 시도했다. 1. @staticmethod 사용하기. 2. Singelton 패턴을 사용했다. 파이썬 프로젝트 전체에 대해 한 번만 초기화하거나 로깅을 설정하는 더 좋은 방법은 무엇입니까?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)