在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输出
谢谢:
- http://code.activestate.com/lists/python-list/621740/和;
- 如何通过不同的类和导入,随时随地用Pythonlogin来更改文件句柄