我创建了一个扩展 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。
关于python getLogger 不适用于派生记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47056588/