如何使日志记录处理程序记录到 flask-socketio
How to make a logging handler log to flask-socketio
我想通过 Flask SocketIO 套接字将记录处理程序创建的记录写入网页(即,将我在控制台获得的相同日志消息打印到网页)。
我看到有很多 handlers 可用,但其中 none 似乎很适合这种情况。也许我需要一个自定义处理程序?
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");
据我所知,none 的内置处理程序执行此操作。这个自定义处理程序对我有用:
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)
我想通过 Flask SocketIO 套接字将记录处理程序创建的记录写入网页(即,将我在控制台获得的相同日志消息打印到网页)。
我看到有很多 handlers 可用,但其中 none 似乎很适合这种情况。也许我需要一个自定义处理程序?
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");
据我所知,none 的内置处理程序执行此操作。这个自定义处理程序对我有用:
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)