【发布时间】:2020-06-22 13:16:42
【问题描述】:
我有我用四个处理程序定义的根记录器;
- 文件处理程序错误
- 文件处理程序信息
- 文件处理程序调试
- StreamHandler 信息
现在我有一个模块,它通过侦听队列从多进程中收集日志。我希望这个模块只记录到 FileHandlers。我尝试使用以下代码来实现;
class ModuleLogger(Singleton):
def __init__(self):
# Create a queue to stash the messages
self.queue = Queue(-1)
# Start thread
thread = Thread(target=self.__receive)
thread.daemon = True
thread.start()
def __receive(self):
# Keep checking the queue for new logging messages
while 1:
try:
record = self.queue.get()
# Exit on None value
if record is None:
break
logger = logging.getLogger(record.name)
logger.setLevel(logging.DEBUG)
for handler in logging.getLogger().handlers:
if type(handler) != type(logging.StreamHandler()):
logger.addHandler(handler)
logger.handle(record)
except Exception:
...
...
但是,消息仍会记录到标准输出。但是,当我打印 logger.handlers 时,它只显示 FileHandlers。所以这导致了这个SO帖子的问题; 如何确保记录器不使用其父处理程序?
【问题讨论】:
标签: python python-3.x logging