子类logging.Logger的模式

2024-06-16 10:46:37 发布

您现在位置:Python中文网/ 问答频道 /正文

是否有一个共同的模式可以遵循正确的子类logging.Logger

import logging

class MyLogger(logging.Logger):
    __init__(self, name):
        super().__init__(name=name)

属性似乎不起作用,因为以这种方式创建的MyLogger没有对其父级的引用。虽然我可以手动设置它的父级,但恐怕loggging.Logger的其他协议也不满足MyLogger


Tags: nameimportself属性initlogging方式模式
1条回答
网友
1楼 · 发布于 2024-06-16 10:46:37

如何创建记录器实例?规范的方法是永远不要直接实例化记录器,而是使用管理器。日志库有setLoggerClass来告诉管理器在创建记录器时要使用哪个类。经理还设置了家长:

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'

相关问题 更多 >