2013-12-08 6 views
7

Heroku対応のFlaskアプリケーションをセットアップしようとしていますが、ログを有効にする方法がわかりません。Foremanとの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) 
がそうのようにそれを起動し

python hello.py 

をして標準出力にログを持っている

Flask tutorialで説明したようにフォアマンがなければ、私は、HelloWorldアプリケーションを作成することができます。

私は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

フラスコAのデフォルトのロギング設定ppsはデバッグモードとプロダクションモードで異なります。

最初の例では、デバッグモードです。この場合、Flaskはレベルlogging.DEBUG以上のすべてのメッセージをstderrに記録するログハンドラを定義します。

2番目の例は、デバッグモードではありません。デバッグモードが有効になっていない場合、Flaskはロガーオブジェクトを作成しますが、ハンドラーを追加しないため、何も印刷されません。

あなたがそうあなたがする必要があるすべてはあなたの選択のログレベルで StreamHandlerを追加され、ログが stdoutまたは stderrに送信する必要がフォアマンとHerokuのために

:あなたはあなたを好む場合は、

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の制御アプリケーションのデバッグモードを有効にすることができます。Miguel-感謝@

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

が、これはのみのために働いています警告レベルのログ。デバッグレベルのロギングはまだ表示されません。 Foremanでデバッグモードでアプリを実行するにはどうすればよいですか? – Yarin

+0

@ヤリン:コードを更新しました。親ロガーではなく、ハンドラーでロギングレベルを設定しました。また、 'app.run()'を呼び出さずにデバッグモードを設定する方法を示すスニペットを追加しました。 – Miguel

+0

@ Miguel- Perfect-一行 'app.debug = True'は本当に必要なものでした。 – Yarin

関連する問題