You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.12中dictConfig配置自定义QueueHandler失效问题咨询

问题:Python 3.12中dictConfig与自定义ZMQ QueueHandler兼容问题

在Python 3.12中,原本基于logging cookbook实现的跨进程ZMQ日志方案(自定义ZMQQueueHandler和ZMQQueueListener)无法通过dictConfig正常加载。原因是3.12对QueueHandler的配置逻辑做了变更,默认要求配置中包含queue、listener等参数,用于自动创建单进程内的队列监听器,但该逻辑不适用于跨进程的ZMQ场景。

解决方案

不需要放弃继承QueueHandler,只需调整自定义ZMQQueueHandler的初始化方法,兼容3.12dictConfig传递的额外参数即可,同时保留原有跨进程ZMQ通信逻辑。

修改后的ZMQQueueHandler实现

# zmq-logging-handler.py
_context = zmq.Context()

class ZMQQueueHandler(logging.handlers.QueueHandler):
    def __init__(self, address, ctx=None, queue=None, listener=None, **kwargs):
        # 忽略dictConfig传入的queue和listener参数,使用自定义ZMQ socket作为队列
        self.ctx = ctx or _context
        socket = self.ctx.socket(zmq.PUSH)
        socket.connect(address)
        # 调用父类构造方法,传入ZMQ socket
        super().__init__(socket)
        
        # 处理配置中的其他参数(如level、formatter等)
        for attr, value in kwargs.items():
            if hasattr(self, attr):
                setattr(self, attr, value)

    def enqueue(self, record: logging.LogRecord) -> None:
        self.queue.send_json(record.__dict__)

    def close(self) -> None:
        self.queue.close()

配置字典保持不变

原有的dictConfig配置无需修改,因为修改后的ZMQQueueHandler会自动忽略3.12dictConfig传递的额外参数:

config = {
  'version': 1,
  'disable_existing_loggers': False,
  'formatters': {
    'full': {
      'format': "%(asctime)s %(levelname)-8s %(name)s %(message)s",
      'datefmt': "%Y-%m-%d %H:%M:%S"
    }
  },
  'handlers': {
    'zmq-logging': {
      'class': 'zmq-logging-handler.ZMQQueueHandler',
      'formatter': 'full',
      'level': 'DEBUG',
      'address': DEFAULT_ADDR
    }
  },
  'loggers': {
    '': {
      'level': 'DEBUG',
      'propagate': False,
      'handlers': ['zmq-logging']
    }
  }
}

关于3.12 QueueListener新特性的说明

3.12新增的QueueHandler自动关联QueueListener的逻辑,仅适用于单进程内的日志队列场景。对于跨进程的ZMQ日志方案,你仍然需要手动启动独立的ZMQQueueListener进程,原有启动逻辑保持不变即可,无需使用dictConfig中的listener配置参数。

内容的提问来源于stack exchange,提问作者warownia1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:27:17