【问题标题】:Python Setup logging configuration only oncePython Setup 日志配置仅一次
【发布时间】:2017-12-05 08:09:50
【问题描述】:

我只想读取一次 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)

【问题讨论】:

    标签: python python-3.x logging design-patterns static-methods


    【解决方案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)  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2016-10-10
      • 2015-01-13
      相关资源
      最近更新 更多