我正在尝试设置一个支持 Heroku 的 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
并登录标准输出。
当我关注 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!'
所以我不知道如何在 Debug模式下运行和/或获取日志输出:
foreman start -p 5000
简介:
web: gunicorn hello:app
最佳答案
Flask 应用程序的默认日志记录配置在 Debug模式和生产模式下是不同的。
在您的第一个示例中,您处于 Debug模式。在这种情况下,Flask 定义了一个日志处理程序,它将所有级别为 logging.DEBUG
或更高级别的消息记录到 stderr
。
第二个示例未处于 Debug模式。当未启用 Debug模式时,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 控制的应用程序启用 Debug模式,尽管我不建议对生产应用程序这样做:
from flask import Flask
app = Flask(__name__)
app.debug = True
关于python - 使用 Foreman 进行 Flask 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20457567/