首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python对象实例可以同时具有不同的记录器级别吗?

Python对象实例可以同时具有不同的记录器级别吗?
EN

Stack Overflow用户
提问于 2019-05-31 17:56:54
回答 1查看 55关注 0票数 0

我希望程序中的不同对象具有不同的日志记录级别。这有可能吗?

我创建了一个基类,如下所示,其中包含设置日志记录级别的方法。

代码语言:javascript
复制
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方法中有以下内容:

代码语言:javascript
复制
self.verbosity = verbosity

但是,我观察到的是,每当使用任何一个类的实例来设置日志级别时,日志级别都是全局设置的。是否有任何方法将日志记录级别限制为特定的类实例?

编辑:利用约翰·戈登的建议,我想出了一个解决方案。请看下面的内容。

EN

回答 1

Stack Overflow用户

发布于 2019-06-01 15:47:42

我能够通过对Logger类进行以下更改来解决这个问题。

代码语言:javascript
复制
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函数中调用它。

代码语言:javascript
复制
self.initialize_logger()
#Set logging level - {DEBUG,INFO,WARNING,ERROR}
self.verbosity = verbosity

最后,我使用了我用logger创建的initialize_logger()对象,而不是logging.debug()

代码语言:javascript
复制
self.logger.debug('My log message')

现在,我可以单独控制所有类的日志记录级别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56399792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档