Deshabilitar los mensajes de la consola en el servidor Flask

Tengo un servidor Flask ejecutándose en modo independiente (usando app.run() ). Pero, no quiero ningún mensaje en la consola, como

 127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200 - ... 

¿Cómo deshabilito el modo detallado?

Related of "Deshabilitar los mensajes de la consola en el servidor Flask"

Puede establecer el nivel de configuración del registrador Werkzeug en ERROR, en ese caso solo se registran los errores:

 import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) 

Aquí hay un ejemplo completo de prueba en OSX, Python 2.7.5, Flask 0.10.0:

 from flask import Flask app = Flask(__name__) import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

Otra razón por la que puede querer cambiar la salida del registro es para las pruebas y redirigir los registros del servidor a un archivo de registro.

Tampoco pude hacer que la sugerencia anterior funcione, parece que los registradores están configurados como parte del inicio de la aplicación. Pude hacerlo funcionar cambiando los niveles de registro después de iniciar la aplicación:

 ... (in setUpClass) server = Thread(target=lambda: app.run(host=hostname, port=port, threaded=True)) server.daemon = True server.start() wait_for_boot(hostname, port) # curls a health check endpoint log_names = ['werkzeug'] app_logs = map(lambda logname: logging.getLogger(logname), log_names) file_handler = logging.FileHandler('log/app.test.log', 'w') for app_log in app_logs: for hdlr in app_log.handlers[:]: # remove all old handlers app_log.removeHandler(hdlr) app_log.addHandler(file_handler) 

Desafortunadamente, * Running on localhost:9151 y la primera comprobación de estado se imprime en la salida estándar, pero cuando se ejecutan muchas pruebas, se limpia una tonelada.

“Entonces, ¿por qué log_names ?”, Preguntas. En mi caso, había algunos registros adicionales de los que necesitaba deshacerme. Pude encontrar qué registradores agregar a log_names a través de:

 from flask import Flask app = Flask(__name__) import logging print(logging.Logger.manager.loggerDict) 

Nota al margen: sería bueno si hubiera un flaskapp.getLogger () o algo así, por lo que esto fue más robusto en todas las versiones. ¿Algunas ideas?

Algunas palabras clave más: registro de prueba del matraz eliminar salida de salida estándar

gracias a:

La solución de @Drewes funciona la mayor parte del tiempo, pero en algunos casos, todavía tiendo a obtener registros de werkzeug. Si realmente no quieres ver ninguno de ellos, te sugiero que lo deshabilites así.

 from flask import Flask import logging app = Flask(__name__) log = logging.getLogger('werkzeug') log.disabled = True app.logger.disabled = True 

Para mi falló cuando se abort(500) .

En caso de que esté utilizando el servidor WSGI, configure el registro en Ninguno

 gevent_server = gevent.pywsgi.WSGIServer(("0.0.0.0", 8080), app,log = None) 

Esta solución le proporciona una forma de obtener sus propias impresiones y acumular trazados, pero sin registros de nivel de información del matraz de succión 127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200

 from flask import Flask import logging app = Flask(__name__) log = logging.getLogger('werkzeug') log.disabled = True 

Una forma de fuerza bruta para hacerlo si realmente no desea que nada inicie sesión en la consola junto a las declaraciones de print () es logging.basicConfig(level=logging.FATAL) . Esto deshabilitaría todos los registros que tengan un estado fatal. No deshabilitaría la impresión, pero sí, solo un pensamiento: /

EDITAR: Me di cuenta de que sería egoísta por mi parte no poner un enlace a la documentación que usé 🙂 https://docs.python.org/3/howto/logging.html#logging-basic-tutorial