如何使用`gevent.pywsgi.WSGIServer`和`WebSocketHandler`启用Flask应用程序的日志记录?

fin*_*oot 6 python wsgi websocket gevent flask

该问题应该可以通过以下两个最小示例重现:

最小的例子 app.run()

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return 'Hello'

app.run()
Run Code Online (Sandbox Code Playgroud)

最小的例子 gevent.pywsgi.WSGIServer

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return 'Hello'

from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

前 5 行是相同的,因此两个示例仅在启动服务器的方式上有所不同。两台服务器都可以工作,我在浏览器中收到“Hello”。第一个示例打印:

 * Serving Flask app "1" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [20/Jun/2019 23:43:15] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jun/2019 23:43:19] "GET / HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)

因此,控制台输出显示了有关服务器处理的每个请求的一些信息。

但是,对于第二个示例,我不再在控制台中获得任何日志输出。如何为gevent.pywsgi.WSGIServer和启用日志记录WebSocketHandler


背景(我认为这与问题无关)

我正在运行一个 Flask 应用程序,它使用flask_sockets. 因为

Werkzeug 开发服务器无法为 WSGI 环境提供 websocket 接口

我无法使用服务器,app.run()而我正在使用gevent.pywsgi.WSGIServer。我上面示例的代码直接取自https://github.com/heroku-python/flask-sockets 上的模块示例,未经任何修改。

Boo*_*any 5

日志记录的工作方式与gevent.pywsgi.WSGIServer. 它使用python 日志记录,并且更加复杂和灵活。

这是一个例子:

from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler

import logging
logging.basicConfig(level=logging.INFO)

server = pywsgi.WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)
server.serve_forever() 
Run Code Online (Sandbox Code Playgroud)

现在,无论您想要输出,您都可以执行以下操作:

logging.info("You can see me now...")   
Run Code Online (Sandbox Code Playgroud)

如果您想查看 WSGIServer 的启动信息,请将日志级别设置为 DEBUG,您可以看到大量输出。


fin*_*oot 0

应该像这样工作,但这是已经报告的模块WebSocketHandler中的错误:https: //gitlab.com/noppo/gevent-websocket/issues/16geventwebsocket