在Flask服务器中禁用控制台消息

我有一个Flask服务器以独立模式运行(使用app.run() )。 但是,我不希望在控制台中的任何消息,如

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

如何禁用详细模式?

您可以将Werkzeuglogging器的设置级别设置为ERROR,在这种情况下,只会logging错误:

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

这里是一个完整的工作示例testet 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() 

您可能想要更改日志logging输出的另一个原因是testing,并将服务器日志redirect到日志文件。

我也无法得到上面的build议工作,它看起来像logging器设置为应用程序启动的一部分。 我可以通过启动应用程序更改日志级别来实现它:

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

不幸的是, * Running on localhost:9151和第一次健康检查仍然打印到标准输出,但是当运行大量testing时,它会清理输出一吨。

“那么为什么log_names ?”,你问。 在我的情况下,有一些额外的日志,我需要摆脱。 我能够通过以下方式find要添加到log_names的logging器:

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

注意:如果有一个flaskapp.getLogger()或者其他的东西,这样会更好,所以这个版本更加强大。 有任何想法吗?

更多的关键词:瓶testing日志删除stdout输出

谢谢: