当前位置: 首页 > news >正文

【日志队列】log日志实时写入队列,流式输出

有一个这样的任务:在网页上流式输出执行一个函数在终端产生的日志,但是目前只有终端日志,可以通过 自定义 loguru 的 Sink 将日志消息定向到线程安全的队列中,主线程从队列中实时获取日志。

import threading
import queue
from loguru import logger
import asyncio
import sys

# 创建线程安全的队列用于存储日志
log_queue = queue.Queue()

# 自定义 Sink 将日志写入队列
def log_sink(message):
    """将 loguru 日志消息推送到队列"""
    log_queue.put(message)

# 配置 loguru(保留终端输出,同时添加队列 Sink)
logger.remove()  # 移除默认配置(可选)
logger.add(log_sink, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}")
logger.add(sys.stderr, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}")  # 保留终端输出

# 异步任务函数
async def main(prompt):
    logger.info("任务启动,参数: {}", prompt)
    await asyncio.sleep(2)
    logger.success("任务完成")

# 线程包装器
def run_async_task(message):
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(main(message))
    loop.close()

# 启动异步线程
prompt = {"message": "测试日志捕获"}
task_thread = threading.Thread(
    target=run_async_task,
    args=(prompt["message"],)
)
task_thread.start()

# 主线程实时捕获日志
try:
    while task_thread.is_alive() or not log_queue.empty():
        try:
            log_record = log_queue.get(timeout=0.1)
            print(f"[捕获的日志] {log_record}")  # 这里可以替换为写入文件或其他处理
        except queue.Empty:
            pass
finally:
    task_thread.join()

相关文章:

  • 【Java 基础(人话版)】进制转换
  • 【区块链】以太坊
  • 什么是云原生?
  • 前端主题切换架构设计方案
  • 蓝耘携手通义万象 2.1 图生视频:开启创意无限的共享新时代
  • 【软设中级】软件设计师中级专题复习:(专题二)程序语言部分
  • 从AI产品经理视角深度剖析Manus:技术、定位与商业化的三重跃迁
  • 如何快速检测光模块内部光纤裂纹?
  • C++ primer plus 类和对象下
  • 从头开始学C语言第二十三天——指针概念
  • MFC控件按钮的使用
  • 深入浅出消息队列 (MQ)
  • Java 断言(Assert)机制
  • pgAdmin 4汉化,设置界面为中文
  • 机器学习(七)
  • 太速科技-636-基于FMC的Kintex XCKU060高性能PCIe载板
  • LVI-SAM、VINS-Mono、LIO-SAM算法的阅读参考和m2dgr数据集上的复现(留作学习使用)
  • python广度优先搜索(BFS)算法
  • 16.使用读写包操作Excel文件:XlsxWriter 包
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(47)乾坤图演路径 - 欧拉路径(Hierholzer 算法)
  • 一个留美学生的思想转向——裘毓麐的《游美闻见录》及其他
  • 病愈出院、跳大神消灾也办酒,新华每日电讯:农村滥办酒席何时休
  • 广西壮族自治区政府主席蓝天立任上被查
  • 中国军网:带你揭开3所新调整组建军队院校的神秘面纱
  • 师爷、文士、畸人:会稽范啸风及其著述
  • 长期吃太饱,身体会发生什么变化?