有没有办法在gunicorn中记录python打印语句?

时间:2014-12-29 11:20:52

标签: python debugging logging bottle gunicorn

使用我的Procfile:

web: gunicorn app:app \
    --bind "$HOST:$PORT" \
    --debug --error-logfile "-" \
    --enable-stdio-inheritance \
    --reload \
    --log-level "debug" 

是否可以将python print语句记录到stdout / bash?我也在这里使用bottle框架,如果这会影响任何事情。

4 个答案:

答案 0 :(得分:17)

事实证明,print陈述实际上是通过了,但有延迟。

设置PYTHONUNBUFFERED的{​​{3}}注释,我认为我有,但似乎语法错误。

我使用我的.env设置的foreman文件解决了这个问题,将变量设置为:

PYTHONUNBUFFERED=TRUE

答案 1 :(得分:5)

请尝试以下命令:

gunicorn --workers 3 --bind 127.0.0.1:5000 --error-logfile /var/log/gunicorn/error.log --access-logfile /var/log/gunicorn/access.log --capture-output --log-level info

它确实对我有用。

请指定log-leveldebug(默认infohttp://docs.gunicorn.org/en/stable/settings.html#loglevel

还要指定capture-output标志(默认为false)http://docs.gunicorn.org/en/stable/settings.html#capture-output

您应该能够查看错误日志文件中的日志。

答案 2 :(得分:5)

在python 3中,在每个打印语句中添加flush=True对我的flask / gunicorn应用程序有效。

例如

gunicorn --bind 0.0.0.0:8080 server --log-level debug

不需要特殊标志。

看看是否有帮助。

答案 3 :(得分:1)

我将Python3与Flask一起使用。

我直接使用print('log info')而不是print('log info', flush=True)

我只将capture_output设置为True并设置了errorlog文件即可。

注意that

  

捕获输出

     

--capture-output
  False
   将stdout / stderr重定向到错误日志

中的指定文件

我认为您需要指定一个错误日志文件以获取标准输出。


这是我的配置文件gunicorn.config.py设置

accesslog = 'gunicorn.log'
errorlog = 'gunicorn.error.log'
capture_output = True

然后使用gunicorn app_py:myapp -c gunicorn.config.py

运行

等值命令行为

gunicorn app_py:myapp --error-logfile gunicorn.error.log --access-logfile gunicorn.log --capture-output