我正在尝试设置一个Heroku-ready Flask应用程序,但我无法弄清楚如何打开日志记录。
如果没有Foreman,我可以创建一个helloworld应用程序,如Flask tutorial:
中所述from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
app.logger.debug('A value for debugging')
app.logger.warning('A value for warning')
return "Hello World!"
if __name__ == "__main__":
app.run(debug=True)
像这样开始:
python hello.py
并登录stdout。
但是,当我按照Heroku tutorial时,没有app.run
行:
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
app.logger.debug('A value for debugging')
app.logger.warning('A value for warning')
return 'Hello World!'
所以我无法弄清楚如何在调试模式下运行和/或获取日志输出:
foreman start -p 5000
Procfile:
web: gunicorn hello:app
答案 0 :(得分:11)
Flask应用程序的默认日志记录配置在调试与生产模式下有所不同。
在第一个示例中,您处于调试模式。在这种情况下,Flask定义了一个日志处理程序,它将级别为logging.DEBUG
或更高级别的所有邮件记录到stderr
。
第二个示例未处于调试模式。未启用调试模式时,Flask会创建一个记录器对象,但不会向其添加任何处理程序,因此不会打印任何内容。
对于Foreman和Heroku,您需要将日志发送到stdout
或stderr
,因此您需要做的就是添加StreamHandler
以及您选择的日志记录级别:
import os
from flask import Flask
app = Flask(__name__)
# log to stderr
import logging
from logging import StreamHandler
file_handler = StreamHandler()
app.logger.setLevel(logging.DEBUG) # set the desired logging level here
app.logger.addHandler(file_handler)
@app.route('/')
def hello():
app.logger.debug('A value for debugging')
app.logger.warning('A value for warning')
return 'Hello World!'
或者,如果您愿意,您可以不执行任何操作,只为Foreman / Heroku控制的应用程序启用调试模式,尽管这不是我为生产应用程序推荐的内容:
from flask import Flask
app = Flask(__name__)
app.debug = True