可以通过以下两个最小示例来重现该问题:
带有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.WSGIServer
和WebSocketHandler
的日志记录?背景(我认为与问题无关紧要)
我正在运行一个使用
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,您可以看到大量的输出。