子类化模式 logging.Logger
Pattern to subclass logging.Logger
是否有一个共同的模式可以遵循以正确地子类化 logging.Logger
?
import logging
class MyLogger(logging.Logger):
__init__(self, name):
super().__init__(name=name)
似乎不起作用 属性,因为以这种方式创建的 MyLogger
没有引用其父项。虽然我可以手动设置它的父级,但恐怕 loggging.Logger
的其他协议也不满足 MyLogger
?
您如何创建记录器实例?规范的做法是永远不要直接实例化记录器,而是使用管理器。日志库有 setLoggerClass
来告诉管理器在创建记录器时使用哪个 class。管理员还设置 parents:
import logging
class MyLogger(logging.Logger):
def __init__(self, name):
super().__init__(name=name)
logging.setLoggerClass(MyLogger)
logger = logging.getLogger('some_logger')
child_logger = logging.getLogger('some_logger.child')
print(type(logger)) # MyLogger
print(logger.parent) # shows the root logger
print(child_logger.parent) # shows 'some_logger'
是否有一个共同的模式可以遵循以正确地子类化 logging.Logger
?
import logging
class MyLogger(logging.Logger):
__init__(self, name):
super().__init__(name=name)
似乎不起作用 属性,因为以这种方式创建的 MyLogger
没有引用其父项。虽然我可以手动设置它的父级,但恐怕 loggging.Logger
的其他协议也不满足 MyLogger
?
您如何创建记录器实例?规范的做法是永远不要直接实例化记录器,而是使用管理器。日志库有 setLoggerClass
来告诉管理器在创建记录器时使用哪个 class。管理员还设置 parents:
import logging
class MyLogger(logging.Logger):
def __init__(self, name):
super().__init__(name=name)
logging.setLoggerClass(MyLogger)
logger = logging.getLogger('some_logger')
child_logger = logging.getLogger('some_logger.child')
print(type(logger)) # MyLogger
print(logger.parent) # shows the root logger
print(child_logger.parent) # shows 'some_logger'