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

带有app.run()的最小示例

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

app.run()

带有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()

前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 -

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

但是,在第二个示例中,我不再在控制台中获得任何日志记录输出。如何启用gevent.pywsgi.WSGIServerWebSocketHandler的日志记录?

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

我正在运行一个使用flask_sockets的Flask应用程序。因为



我无法将服务器与app.run()一起使用,而是使用gevent.pywsgi.WSGIServer。我上面的示例代码直接取自https://github.com/heroku-python/flask-sockets的模块示例,而无需进行任何修改。

最佳答案

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

这是一个例子:

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()

现在,无论您要输出什么地方,都可以执行以下操作:
logging.info("You can see me now...")

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

09-28 00:57