我通过Python logging
模块将事件记录到控制台。
我还想通过socket-io(flask)将该日志消息发送到客户端。
以下方法只取得了部分成功。
from flask.ext.socketio import send
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):
send(record.getMessage())
sio = SocketIOHandler()
logger.addHandler(sio)
我在浏览器中得到结果,但仍然得到
RuntimeError: working outside of request context
用于控制台上的每个发送呼叫。我认为发送呼叫的上下文不可用......处理该问题的有用方法是什么?感谢。
答案 0 :(得分:1)
send
和emit
函数是上下文感知函数,只能在事件处理程序内部工作。 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)
第一行可能需要适应您的应用程序结构,但有了这个,您的应用程序将向所有客户端广播日志。
希望这有帮助!