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

如何配置Python logging将日志同时传入循环队列处理函数?

Python logging 实现文件日志+循环队列日志同步处理

问题描述

我在项目中用Python的logging模块把日志写到本地.log文件里,现在想让同一份日志同时传入另一个函数,用循环队列算法做本地日志记录。能不能通过配置logger实现这个需求?

当前的logging配置代码如下:

logger=logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter=logging.Formatter("<SOME FORMAT>")
file_handler=logging.FileHandler('logfile.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

解决方案

完全可以实现。Python logging的核心设计就是支持多Handler扩展——一个logger可以绑定多个Handler,每个Handler独立处理日志事件。你只需要自定义一个基于循环队列的Handler,把它添加到现有logger中即可。

自定义循环队列Handler示例

import logging
from collections import deque

class CircularQueueHandler(logging.Handler):
    def __init__(self, max_size=100):
        super().__init__()
        self.queue = deque(maxlen=max_size)  # 初始化循环队列,超出容量自动丢弃最早日志

    def emit(self, record):
        # 按格式处理日志记录
        formatted_log = self.format(record)
        # 将日志加入循环队列
        self.queue.append(formatted_log)
        # 这里可以调用你的自定义处理函数,执行循环队列相关的日志操作
        self.handle_queue_logs()

    def handle_queue_logs(self):
        # 在这里实现你的循环队列日志处理逻辑,比如定时写入本地文件、批量处理等
        pass

修改原有配置,添加自定义Handler

把自定义的CircularQueueHandler添加到logger中,和原有的FileHandler共存:

logger=logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter=logging.Formatter("<SOME FORMAT>")

# 保留原有的文件Handler
file_handler=logging.FileHandler('logfile.log')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)

# 添加循环队列Handler
queue_handler = CircularQueueHandler(max_size=200)  # 可根据需求调整队列容量
queue_handler.setFormatter(formatter)
logger.addHandler(queue_handler)

这样配置后,每条日志都会同时被FileHandler写入本地.log文件,以及被CircularQueueHandler处理并加入循环队列,完全满足你的需求。

更新:问题已解决,感谢社区用户@imriqwe的解答。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:10:24