2013-12-08 166 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