如何使日志处理程序记录到flasksocketio

2024-04-26 08:04:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过Flask SocketIO套接字将日志处理程序创建的记录写入网页(即,将控制台上获得的相同日志消息打印到网页)

我看到有许多handlers可用,但似乎没有一个适合这种情况。也许我需要一个自定义处理程序

class MessagePaneHandler:
    # some log data is received 
    socketio.emit("event_name", log_message_from_handler, namespace="/some_namespace", broadcast=True)

更新:

据我所知,logging.handlers.SocketHandler写入原始TCP套接字。我是否可以使用logging.handlers.SocketHandler来向Flask SocketIO套接字写入数据?如果是,怎么做

如果有帮助,以下是我在前端设置插座的方式:

var socket = io.connect("http://" + document.domain + ":" + location.port + "/some_namespace");

Tags: log消息处理程序网页flasklogginghandlers记录
1条回答
网友
1楼 · 发布于 2024-04-26 08:04:16

据我所知,没有一个内置处理程序能做到这一点。这个自定义处理程序为我完成了以下任务:


from flask_socketio import SocketIO
socketio = SocketIO()

class SocketIOHandler(logging.Handler):
    """A logging handler that emits records with SocketIO."""

    def __init__(self):
        super().__init__()

    def emit(self, record):
        asctime = record.__dict__["asctime"]
        msecs = record.__dict__["msecs"]
        levelname = record.__dict__["levelname"]
        module = record.__dict__["module"]
        message = record.__dict__["message"]
        msg = f"{asctime}.{round(msecs):03} [{levelname:<5.5s}]  {module:<18s}  {message}"
        socketio.emit("update_message_box", msg, namespace="/printing", broadcast=True)

相关问题 更多 >