app.logger.info( "This is a message")などのFlaskのロガーからのメッセージは、gunicornのログファイルに保存されません。
Flaskは、環境について何も想定していないため、デフォルトでは本番モードでメッセージをログに記録しません(http://flask.pocoo.org/docs/errorhandling/)。 Flaskのapp.loggerでgunicornを介してメッセージをログに記録するには、ログハンドラーを追加する必要があります。 たとえば、gunicornのstderrへのロガーは次のとおりです。
import logging
import flask
app = flask.Flask(__name__)
@app.before_first_request
def setup_logging():
if not app.debug:
# In production mode, add log handler to sys.stderr.
app.logger.addHandler(logging.StreamHandler())
app.logger.setLevel(logging.INFO)
これはgunicornの問題ではなく、閉じることができます。
リクエストごとにクローズ。 ありがとう!
gunicornはSTDERRからログを自動的に取得しますか?
@benoitc
gunicornにSTDERRからログを選択させるにはどうすればよいですか?
-Rフラグはあなたが探しているものかもしれません。
http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable -stdio-inheritance
-Rは私のためにそれをしませんでした。
以下は私のセットアップです
@app.route('/')
def index():
console = logging.StreamHandler()
log = logging.getLogger("asdasd")
log.addHandler(console)
log.setLevel(logging.DEBUG)
log.error("Something")
print >> sys.stderr, "Another thing"
return 'ok'
これが私がそれを実行する方法です
gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level -D debug server:app
/mnt/log/test.logにgunicornログがありますが、アプリケーションログがありません。
わかった。 それが単純な問題でない限り、私はそれがどのように機能するかを誤解するかもしれません
stderrを手動でフラッシュする必要があります(IIRCこれはバッファリングされるためです
gunicornがフォークするとき、多分?)
ただし、ログメッセージの送信先を制御する方がはるかに簡単です。
stdioの代わりにpythonロガーを使用します。
2014年6月26日午後1時39分、「YousufFauzan」 [email protected]は次のように書いています。
-Rは私のためにそれをしませんでした。
以下は私のセットアップです
@ app.route( '/')
def index():
console = logging.StreamHandler()
log = logging.getLogger( "asdasd")
log.addHandler(コンソール)
log.setLevel(logging.DEBUG)
log.error( "何か")
印刷>> sys.stderr、「別のこと」
'ok'を返すこれが私がそれを実行する方法です
gunicorn --access-logfile --- log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level debug server:app
/mnt/log/test.logにgunicornのログがありますが、アプリケーションがありません
ログ。—
このメールに直接返信するか、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/379#issuecomment-47276949 。
私は問題を見つけたと思います。 これが19.00の変更ログのエントリです
fix logging: don’t try to redirect stdout/stderr to the logfile.
v18で試したところ、StreamHandlerからのログがgunicornログにルーティングされています。 これを修正する方法はありますか?
@benoitc @tilgovi
@spicavigo gunicornは、stderrをログファイルに自動的にリダイレクトしません。 修正は、#591で説明したようにハックを削除することでした。 コンソールにログを表示する--error-logfile=-
を試しましたか?
エラーをエラーファイルに直接返したい場合は、最終的にenviron ['wsgi.errors']に出力するか、ログに記録することができます:ee08ac86441e36c3433849b79b3839d1425647fd。
ありがとう@benoitc
stderrではなくファイルにログを記録しています。 変更が私の開発者の間で起こったというだけで、それは完全に私をつまずかせました。 私はpipinstall gunicornでしたが、突然stderrリダイレクトが機能しなくなり、バージョンの変更によるものであり、コードのバグによるものではないことに気づきませんでした:)
@benoitc stderrをログファイルに記録することはまだ可能ですか?
最も参考になるコメント
Flaskは、環境について何も想定していないため、デフォルトでは本番モードでメッセージをログに記録しません(http://flask.pocoo.org/docs/errorhandling/)。 Flaskのapp.loggerでgunicornを介してメッセージをログに記録するには、ログハンドラーを追加する必要があります。 たとえば、gunicornのstderrへのロガーは次のとおりです。
これはgunicornの問題ではなく、閉じることができます。