2016-06-27 2 views
3

私はWebアプリケーションのサーバーを起動するためにwsgiサーバーを使用しています。情報のロギングに問題があります。WSGIサーバーとフラスコアプリケーションのログ

は、これは、私はそれが何をログに記録されていないアプリケーションを実行するには、

from gevent import monkey; monkey.patch_all() 
from logging.handlers import RotatingFileHandler 
import logging 
from app import app # this imports app 

# create a file to store weblogs 
log = open(ERROR_LOG_FILE, 'w'); log.seek(0); log.truncate(); 
log.write("Web Application Log\n"); log.close(); 

log_handler = RotatingFileHandler(ERROR_LOG_FILE, maxBytes =1000000, backupCount=1) 

formatter = logging.Formatter(
    "[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s" 
    ) 
log_handler.setFormatter(formatter) 
app.logger.setLevel(logging.DEBUG) 
app.logger.addHandler(log_handler) 

# run the application 
server= wsgi.WSGIServer(('0.0.0.0', 8080), app) 
server.serve_forever() 

しかしアプリを実行している方法です。私は、WSGIサーバーがないためにapp.loggerが動作するため、WSGIサーバーが原因であると考えられます。 WSGIを使用しているときにどのように情報を記録できますか?

答えて

3

gevent uwsgi documentationあなたは創造でてWSGIServerオブジェクトにログ・ハンドラオブジェクトを渡す必要がありますによると:

ログ - 意志要求(アクセス)ログへの書き込み方法では、オブジェクトを指定した場合書かれている。指定されない場合、デフォルトはsys.stderrになります。要求ログを無効にするには、Noneを渡すことができます。 writeメソッドを実装していないオブジェクトをサポートするには、例えばロギングの周りのラッパーを使用することができます。 (あなたはLoggerインスタンスを渡すか、一般的なログの方法を提供し、何かではなく、書き込み方法では、このようなラッパーが自動的に作成され、それがINFOレベルでのログに記録されます。)

error_logに - 指定された場合、エラーログが書き込まれる書き込み、書き込みライン、およびフラッシュメソッドを持つファイルライクなオブジェクト。指定されない場合、デフォルトはsys.stderrになります。 Noneを渡してエラーログを無効にすることができます(推奨されません)。適切なメソッドを実装していないオブジェクトをサポートするために、例えばロギングの周りのラッパーを使用することができます。このパラメータは、WSGI環境のwsgi.errorsの値になります(まだ設定されていない場合)。 (ログと同じように、ロガーインスタンスなどのラッパーが自動的に作成され、ERRORレベルでに記録されます。)

ので、あなたはそれが=アプリのログを `でなければなりませんwsgi.WSGIServer(('0.0.0.0', 8080), app, log=app.logger)

+1

を行うことができるはず。 logger'以外の場合は 'logオブジェクトに書き込み関数がありません 'と言っています。ありがとうbtw! – mousecoder

+0

私は私の答えを更新します、これはあなたのために働いた場合は受け入れてください! – pech0rin

関連する問題