Skip to main content
 首页 » 编程设计

python getLogger 不适用于派生记录器

2025年01月19日24bhlsheji

我创建了一个扩展 logging.Logger 的 CustomLogger。我正在尝试使用 getLogger 来获取我的记录器实例化。这是我的代码:

import os 
import sys 
import logging 
import atexit 
 
class CustomLogger(logging.Logger): 
    def __init__(self,name,logfile): 
        super().__init__(name, level=logging.DEBUG) 
        self.logfile_handler = logging.FileHandler(logfile) 
        self.logfile_handler.setLevel(logging.DEBUG) 
        self.logfile_handler.setFormatter(logging.Formatter('%(name)s | %(levelname)s | %(message)s')) 
        self.addHandler(self.logfile_handler) 
        atexit.register(logging.shutdown) 
 
        print("Created logger: " + name + "  " + logfile) 
 
mycustom = CustomLogger("cust","./cust.log") 
mycustom.critical("from direct write")  #CORRECTLY WRITES TO FILE 
logging.getLogger("cust").critical("from getLogger") #FAILS TO WRITE TO FILE 

如何使用 getLogger 写入自定义实例?

我的意图是在其他模块中使用 logging.getLogger("cust") 来写入此记录器。

请您参考如下方法:

logging.getLogger("cust") 尝试使用 logging.Manager 获取或创建,Manager 使用 实例化新记录器默认情况下是 Logger 类,您可以通过调用 logging.setLoggerClass 全局更改它。如果你不想这样做,你可以将你的记录器实例注册到 Manager:

class CustomLogger(logging.Logger): 
    def __init__(self,name,logfile): 
        super().__init__(name, level=logging.DEBUG) 
        ... 
        self.manager.loggerDict[name] = self 

显然,这是一个 hack。