Конфигурация регистрации Python Setup только один раз

Я хочу прочитать файл logging.config только один раз и включить / отключить регистратор только один раз для всех модулей в моем проекте python. Я пробовал следующие способы: 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)

1 ответ

Решение

Настройка с использованием шаблона Сингелтона

#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)  
Другие вопросы по тегам