为什么gunicorn没有将500内部服务器错误记录到stderr?

时间:2016-05-29 15:46:18

标签: python logging nginx gunicorn stderr

我有一个使用Flask构建的网站,并在gunicorn后面Nginx上运行。当我使用以下命令手动运行gunicorn时

gunicorn --worker-class eventlet -b 127.0.0.1:5000 app:app

我希望所有输出(包括错误)都记录到终端。但是,当我访问一个在浏览器中产生500响应的特定页面时,nginx_access.log中的一行说明了这一点:

83.161.xx.xx - - [29/May/2016:15:33:12 +0000] "GET /invites HTTP/1.1" 500 291 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36"

但是我从正在运行的gunicorn实例中得不到这个500的输出。这使得调试错误几乎不可能。

所以我尝试用supervisord运行gunicorn,其中我的gunicorn定义如下:

[program:gunicorn]
command=/home/immoprod/thesite/venv/bin/gunicorn --worker-class eventlet -b 127.0.0.1:5000 app:app
directory=/home/immoprod/thesite
autostart=true
autorestart=true
stdout_logfile=/home/immoprod/logs/gunicorn_access.log
stderr_logfile=/home/immoprod/logs/gunicorn_error.log
stopsignal=QUIT

奇怪的是,我有一个具有相同设置的beta服务器,其中gunicorn会正确记录错误。据我所知,两种设置之间没有什么不同(当然必须有,但我不知道是什么)。

有人知道为什么500内部服务器错误输出的错误没有被Gunicorn记录到stderr?欢迎所有提示!

如果重要:我正在使用gunicorn版本18.0

1 个答案:

答案 0 :(得分:0)

事实证明,我忘记了如果处于生产模式,应用程序会将错误记录到另一个特定于应用程序的日志文件中。

也许这可以提醒未来的人检查应用程序特定的日志..: - )