Yar*_*rin 7 python heroku flask foreman procfile
我正在尝试设置一个Heroku-ready Flask应用程序,但我无法弄清楚如何打开日志记录.
如果没有Foreman,我可以创建一个helloworld应用程序,如Flask教程中所述:
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)
Run Code Online (Sandbox Code Playgroud)
像这样开始:
python hello.py
Run Code Online (Sandbox Code Playgroud)
并登录stdout.
但是,当我遵循Heroku教程时,没有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!'
Run Code Online (Sandbox Code Playgroud)
所以我无法弄清楚如何在调试模式下运行和/或获取日志输出:
foreman start -p 5000
Run Code Online (Sandbox Code Playgroud)
Procfile:
web: gunicorn hello:app
Run Code Online (Sandbox Code Playgroud)
Mig*_*uel 12
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!'
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意,您可以不执行任何操作,只需为Foreman/Heroku控制的应用程序启用调试模式,尽管这不是我为生产应用程序推荐的内容:
from flask import Flask
app = Flask(__name__)
app.debug = True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3096 次 |
| 最近记录: |