こんにちは、
http://docs.gunicorn.org/en/stable/settings.html#accesslogは、 '-'
がstderrに出力されると言っていますが、ロギングの目的でSTDOUTを使用することをお勧めします。 それを行う方法はありますか?
ありがとう!
関連する行は次のとおりです: 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.accesslog
はNone
であり、関数は早期に戻ります。 私の知る限り、 --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 = -`でうまくいくはずです。 そうでない場合は、私に知らせてください。
- benoît
2016年7月27日水曜日08:49、Suriya [email protected]
書きました:@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 = "-"
を使用することもできます
最も参考になるコメント
アプリケーションファイルmyapp.pyを使用して、次のことを試しました。
アクセスログの出力が
stdout
になることを確認できます。