我希望程序中的不同对象具有不同的日志记录级别。这有可能吗?
我创建了一个基类,如下所示,其中包含设置日志记录级别的方法。
class Logging():
""" Utility class for common methods."""
logging_levels = ['DEBUG','INFO']#,'WARNING','ERROR'
@property
def verbosity(self):
return self.__verbosity
@verbosity.setter
def verbosity(self,verbosity):
"""Method to set verbosity of logging on terminal. Different classes may have different levels of verbosity."""
assert verbosity in self.logging_levels, '{} is not a valid logging level!'.format(verbosity)
self.__verbosity = verbosity
#Set logging level - {DEBUG,INFO,WARNING,ERROR}
if verbosity == 'DEBUG':
logging.getLogger().setLevel(logging.DEBUG)
elif verbosity == 'INFO':
logging.getLogger().setLevel(logging.INFO)
elif verbosity == 'WARNING':
logging.getLogger().setLevel(logging.INFO)
print('{}:Logging level is set to:{}'.format(self.name,verbosity))
return self.__verbosity我的另外两个类继承了“Logging”类,在它们各自的init方法中有以下内容:
self.verbosity = verbosity但是,我观察到的是,每当使用任何一个类的实例来设置日志级别时,日志级别都是全局设置的。是否有任何方法将日志记录级别限制为特定的类实例?
编辑:利用约翰·戈登的建议,我想出了一个解决方案。请看下面的内容。
发布于 2019-06-01 15:47:42
我能够通过对Logger类进行以下更改来解决这个问题。
class Logging():
""" Utility class for common methods."""
logging_levels = ['DEBUG','INFO']#,'WARNING','ERROR'
def initialize_logger(self):
"""Initialize loggers for different classes."""
self.logger = logging.getLogger(type(self).__name__)
@property
def verbosity(self):
return self.__verbosity
@verbosity.setter
def verbosity(self,verbosity):
"""Method to set verbosity of logging on terminal. Different classes may have different levels of verbosity."""
assert verbosity in self.logging_levels, '{} is not a valid logging level!'.format(verbosity)
self.__verbosity = verbosity
#Set logging level - {DEBUG,INFO,WARNING,ERROR}
if verbosity == 'DEBUG':
self.logger.setLevel(logging.DEBUG)
elif verbosity == 'INFO':
self.logger.setLevel(logging.INFO)
elif verbosity == 'WARNING':
self.logger.setLevel(logging.WARNING)
self.logger.debug('{}:Logging level is set to:{}'.format(self.name,verbosity))
return self.__verbosity我添加了initialize_logger()方法,并在我想要记录的类的init函数中调用它。
self.initialize_logger()
#Set logging level - {DEBUG,INFO,WARNING,ERROR}
self.verbosity = verbosity最后,我使用了我用logger创建的initialize_logger()对象,而不是logging.debug()。
self.logger.debug('My log message')现在,我可以单独控制所有类的日志记录级别。
https://stackoverflow.com/questions/56399792
复制相似问题