Конфигурация регистрации 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)