Gunicorn: Flaskのapp.loggerからのログメッセージ

作成日 2012年07月19日  ·  11コメント  ·  ソース: benoitc/gunicorn

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の問題ではなく、閉じることができます。

全てのコメント11件

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をログファイルに記録することはまだ可能ですか?

このページは役に立ちましたか?
0 / 5 - 0 評価