Как включить ведение журнала приложения Flask с помощью `gevent.pywsgi.WSGIServer` и` WebSocketHandler`? - PullRequest
0 голосов
/ 21 июня 2019

Проблема должна быть воспроизведена с помощью следующих двух минимальных примеров:

Минимальный пример с 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 строк идентичны, поэтому оба примера отличаются только тем, как они запускают сервер.Оба сервера работают, я получаю «Привет» в браузере.Первый пример печатает:

 * 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?


Фон (думаю, это не имеет значения)

Iзапускаю приложение Flask, которое использует flask_sockets.Поскольку

Сервер разработки Werkzeug не может предоставить среде WSGI интерфейс веб-сокета

Я не могу использовать сервер с app.run(), и я использую gevent.pywsgi.WSGIServer вместо.Код моего примера выше взят непосредственно из примеров модуля на https://github.com/heroku-python/flask-sockets без каких-либо изменений.

Ответы [ 2 ]

0 голосов
/ 20 июля 2019

Ведение журнала отличается от 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, и вы увидите тонны вывода.

0 голосов
/ 25 июня 2019

Это должно работать так, но это ошибка в WebSocketHandler из модуля geventwebsocket, о которой уже сообщалось: https://gitlab.com/noppo/gevent-websocket/issues/16

...