Gunicorn: アクセスログをSTDOUTに印刷するにはどうすればよいですか?

作成日 2016年01月19日  ·  22コメント  ·  ソース: benoitc/gunicorn

こんにちは、

http://docs.gunicorn.org/en/stable/settings.html#accesslogは、 '-'がstderrに出力されると言っていますが、ロギングの目的でSTDOUTを使用することをお勧めします。 それを行う方法はありますか?

ありがとう!

Documentation FeaturLogging

最も参考になるコメント

アプリケーションファイルmyapp.pyを使用して、次のことを試しました。

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

アクセスログの出力がstdoutになることを確認できます。

全てのコメント22件

関連する行は次のとおりです: https ://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler()のデフォルトはsys.stderrです。 おそらく、accesslogを変更して、「stdout」と「stderr」を有効な値として受け入れ、 logging.StreamHandler()に渡すことができます。

別の、しかし柔軟性の低いソリューション:

コンソールハンドラーはすでにsys.stdoutに出力されます: https ://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 gunicorn.accesslogのハンドラーを「コンソール」に設定できますhttps://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55ですでにgunicorn.error gunicorn.accesslog行ったように#$

よくわかりません。 StreamHandlerはすでにsys.stdoutにログオンしていませんか?

いいえ、デフォルト値はsys.stderrです: https ://github.com/python/cpython/blob/master/Lib/logging/__init__.py#L955

はい、分かりました。 元々、ログをstdoutに印刷していました。 IMOのアクセスログはデフォルトでSTDOUTになっているはずです。 考え?

@benoitc :+1:

stdoutのログオンにアクセスする
stderrのエラーログ

このリクエストの更新はありますか?

@benoitcこのコミットがこの問題に対処するかどうかはわかりません。 追加の引数なしでgunicorn myapp:appを実行するとします。 gunicornがアクセスレコードを標準出力に記録する必要があるという期待はありますか? もしそうなら、gunicornはそれをしません。

https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302では、コマンドライン引数なしself.cfg.accesslogNoneであり、関数は早期に戻ります。 私の知る限り、 --log-configまたは--log-syslogを指定せずにstdoutにログインする方法はないようです。 これは正しいです?

これが意味する場合、デフォルトでアクセスログは無効になっていますか?

@benoitcはい。 上記の説明は、アクセスログがstdoutに送信され、エラーログがstderrに送信されることを示しているようです。 ただし、アクセスログはデフォルトで無効になっているようです。

ところで、Python 2.7では、以前は--access-log /dev/stdout --error-log /dev/stderrを実行できましたが、それでうまくいきました。 Python 3では、引数として/dev/stdoutを渡すと、 https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498で失敗します。

👍 @ suriya私はあなたと同じ振る舞いを探していると思います- --capture-log --access-logfile=<something>有効にしたいのですが、アクセスログ行をstdoutに移動することをお勧めしますstderrではありません。

編集:明確にするために、これはPython3の問題のようです。 python3.5.1を使用して、 --access-logfile=/dev/stdoutをgunicornに渡すと、サーバーの起動に失敗します。

はい、アクセスログはデフォルトで無効になっているようです。

@huoxyデフォルトよりも、アクセスログを標準出力に書き込む簡単な方法がないことが問題だと思います。

@ huoxyˋ --access-logfile = -`でうまくいくはずです。 そうでない場合は、私に知らせてください。

@huoxy https://github.com/huoxyデフォルトよりも、私は思う
問題は、アクセスログを書き込む簡単な方法がないことです。
標準出力。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G

また、それはおそらくドキュメントの問題です。 ただし、アクセスログはstdoutに出力する必要があります
-を使用する場合。 それ以外の場合はバグです。 お知らせ下さい...
2016年7月27日水曜日09:03、Benoit [email protected]は次のように書いています。

@ huoxyˋ --access-logfile = -`でうまくいくはずです。 そうでない場合は、私に知らせてください。

@huoxy https://github.com/huoxyデフォルトよりも、私は思う
問題は、アクセスログを書き込む簡単な方法がないことです。
標準出力。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347、
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G

@ benoitc #1293で述べたように、 gunicorn --access-log -は標準エラーへのアクセスをログに記録します。 gunicorn --access-log=-で試しましたが、ログは引き続き標準エラーになります。

これによれば:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

デフォルトのロガーはconsoleで、stdoutに出力されるので、私のようにstdoutにすべてが必要な場合は、gunicornロギングドライバーに到達するために、これらのオプションを空白のままにしておくことができます。

また、私が提案する解決策は、ログファイルのシンボリックリンクを/dev/stdoutまたは/dev/stderrorに作成することです(直接機能しない場合)。

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

先週リリースされたgunicorn19.7.0に移動しました。 残念ながら、まだstderr以外にアクセスログを書き込むことができません。

オプションなしで、また「--access-logfile =-error-logfile =-log-level = DEBUG」を含む/含まないすべての順列でgunicornを実行してみました。

gunicornのロギングに関する基本的なことを見逃していますか? 私の環境またはDjangoからの何かが出血して、この問題を引き起こしている可能性がありますか?

アプリケーションファイルmyapp.pyを使用して、次のことを試しました。

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

アクセスログの出力がstdoutになることを確認できます。

私はPython2.7.14を使用しています。 (何とか数ヶ月前のクイック返信を逃しました。)

gunicorn.config.pyでaccesslog = "-"を使用することもできます

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