2

Pythonloggingモジュールを介してコンソールにイベントを記録します。また、そのログ メッセージを socket-io (フラスコ) 経由でクライアントに送信したいと考えています。次のアプローチは部分的にしか成功しませんでした。

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

コンソールの送信呼び出しごとに。送信呼び出しのコンテキストが利用できないと思います...その問題に対処する便利な方法は何ですか? ありがとう。

4

1 に答える 1

2

および関数はsendemitイベント ハンドラー内からのみ機能するコンテキスト対応関数です。インスタンスからは、同等のコンテキストフリー関数を使用でき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)

アプリケーションの構造に合わせて最初の行を調整する必要があるかもしれませんが、これにより、アプリケーションはすべてのクライアントにログをブロードキャストします。

お役に立てれば!

于 2014-11-10T03:47:07.997 に答える