子类logging.Logger的模式

lea*_*day 1 python logging subclass

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

import logging

class MyLogger(logging.Logger):
    __init__(self, name):
        super().__init__(name=name)
Run Code Online (Sandbox Code Playgroud)

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

blu*_*ues 6

您如何创建记录器实例?规范的方法是永远不要直接实例化 Logger,而是使用 Manager。日志记录库必须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'
Run Code Online (Sandbox Code Playgroud)