2013-05-24 14 views
9

stdout & stderrをログファイルに記録したいのですが、これが私の試みです。フラスコ内のロガーファイルにstdoutとstderrを追加する方法

app = Flask(__name__) 
app.logger.setLevel(logging.INFO) # use the native logger of flask 
app.logger.disabled = False 
handler = logging.handlers.RotatingFileHandler(
    SYSTEM_LOG_FILENAME, 
    'a', 
    maxBytes=1024 * 1024 * 100, 
    backupCount=20 
    ) 

formatter = logging.Formatter(\ 
    "%(asctime)s - %(levelname)s - %(name)s: \t%(message)s") 
handler.setFormatter(formatter) 
app.logger.addHandler(handler) 

@app.route('/') 
def hello(): 

    return 'Hello World' 
if __name__ == '__main__': 
    app.run()   

次にコンソール出力をファイルに記録します。

* Running on http://127.0.0.1:5000/ 
127.0.0.1 - - [24/May/2013 14:55:14] "GET/HTTP/1.1" 200 - 
127.0.0.1 - - [24/May/2013 14:55:14] "GET /favicon.ico HTTP/1.1" 404 - 

どうすればよいですか?あなたが言及

+0

あなたのコードは何をしますか? – Blender

+0

実際には何もしませんが、stdoutとstderrをファイルに記録しようとしていました。また、デバッグ情報とエラー情報をファイルに記録します。 – Kimmi

+0

'logging.INFO'を' logging.DEBUG'に変更します。それはあなたにデバッグメッセージをもらうはずです。 – Blender

答えて

15

ロギングメッセージは、フラスコのロガーから来come fromwerkzeugさんlogger、それはあなたにも例えば、それを動作させるためにそのロガーインスタンスにハンドラを追加する必要があることを意味しません:

log = logging.getLogger('werkzeug') 
log.setLevel(logging.INFO) 
log.addHandler(handler) 

werkzeugがロガーを初期化する方法を見ると、ロギングがまだ設定されていない場合にのみ、デフォルトのハンドラーが追加されることがわかります。つまり、wekzeugが行う前に設定すると、デフォルトのStreamHandlerではなく、あなたが提供するハンドラが使用されます。

+0

詳細情報を指定してください.Werkzeugのロガーに 'ハンドラー'を追加する必要がありますか、新しいロガーを作成する必要がありますか? – Kimmi

+0

もっと明確にしようとしました。 – mata

+0

すごい、そういう意味だよ、ありがとう。 – Kimmi

関連する問題