Python 将控制台日志记录输出重定向到flask socketio
我通过PythonPython 将控制台日志记录输出重定向到flask socketio,python,logging,flask,flask-socketio,Python,Logging,Flask,Flask Socketio,我通过Pythonlogging模块将事件记录到控制台。 我还想通过套接字io(flask)将日志消息发送到客户端。 以下方法只取得了部分成功 从flask.ext.socketio导入发送 fmt_str='%(asctime)s-%(message)s' 格式化程序=logging.formatter(fmt_str) logging.basicConfig(level=logging.INFO,format=fmt\u str) logger=logging.getLogger(“”) 类
logging
模块将事件记录到控制台。
我还想通过套接字io(flask)将日志消息发送到客户端。
以下方法只取得了部分成功
从flask.ext.socketio导入发送
fmt_str='%(asctime)s-%(message)s'
格式化程序=logging.formatter(fmt_str)
logging.basicConfig(level=logging.INFO,format=fmt\u str)
logger=logging.getLogger(“”)
类SocketIOHandler(logging.Handler):
def排放(自我,记录):
发送(record.getMessage())
sio=SocketIOHandler()
logger.addHandler(sio)
我在浏览器中得到结果,但仍然得到
RuntimeError: working outside of request context
对于控制台上的每个发送调用。我认为发送调用的上下文不可用。。。解决这个问题的有效方法是什么?谢谢。发送和发出函数都是上下文感知函数,只能在事件处理程序内部工作。等效的上下文无关函数可从
socketio
实例获得。示例(对您的应用程序做出一些假设,这些假设可能是真的,也可能不是真的):
第一行可能需要根据应用程序的结构进行调整,但这样应用程序将向所有客户端广播日志
希望这有帮助 谢谢你的回复。我以前也试过。这对我不起作用。。。
from app import socketio # flask.ext.socketio.SocketIO instance
fmt_str = '%(asctime)s - %(message)s'
formatter = logging.Formatter(fmt_str)
logging.basicConfig(level=logging.INFO, format=fmt_str)
logger = logging.getLogger("")
class SocketIOHandler(logging.Handler):
def emit(self, record):
socketio.send(record.getMessage())
sio = SocketIOHandler()
logger.addHandler(sio)