2013-12-08 114 views
7

我想设置一个Heroku-ready烧瓶应用程序,但我无法弄清楚如何打开日志记录。与工头烧瓶记录

没有工头,我作为Flask tutorial描述可以创建的HelloWorld应用程序:

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!' 

所以,我无法弄清楚如何在调试模式下运行和/或获取日志输出:

foreman start -p 5000 

Procfile:

web: gunicorn hello:app 

回答

11

对烧瓶内的默认日志配置在调试与生产模式下,pps不同。

在第一个示例中,您处于调试模式。在这种情况下,Flask定义了一个日志处理程序,它将所有消息的日志级别设置为logging.DEBUG或更高,以stderr

第二个示例不处于调试模式。未启用调试模式时Flask创建一个记录器对象,但不添加任何处理程序,因此不打印任何内容。

对于福尔曼和Heroku上,你需要的日志发送到stdoutstderr,因此,所有你需要做的就是添加一个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!' 

或者,如果你愿意,你能做到这一切都不及刚刚启用领班/ Heroku的控制应用程序调试模式,尽管这会不会有事我会建议对生产应用:

from flask import Flask 
app = Flask(__name__) 
app.debug = True 
+0

@ Miguel-感谢,但这只是工作警告级别的日志记录。调试级别的日志记录仍然没有显示出来。如何使用Foreman以调试模式运行应用程序? – Yarin

+0

@Yarin:我已经更新了代码,我在处理程序中设置了日志记录级别,而不是在父记录程序中设置。我还添加了一个片段,向您展示如何在不调用'app.run()'的情况下设置调试模式。 – Miguel

+0

@ Miguel-完美 - 单行'app.debug = True'真的是我所需要的。 – Yarin