Is there a way to log python print statements in gunicorn?

前端 未结 4 1211
伪装坚强ぢ
伪装坚强ぢ 2021-02-03 18:58

With my Procfile like this:

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


        
相关标签:
4条回答
  • 2021-02-03 19:20

    In python 3, adding flush=True in each print statement works for my flask/gunicorn app.

    E.g.

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

    No particular flags are required.

    See if this helps.

    0 讨论(0)
  • 2021-02-03 19:25

    Please try below command:

    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 debug
    

    It did work for me.

    Please specify log-level to debug(default info)http://docs.gunicorn.org/en/stable/settings.html#loglevel,

    Also, specify capture-output flag (default false)http://docs.gunicorn.org/en/stable/settings.html#capture-output.

    You should be able to watch logs in error log file.

    0 讨论(0)
  • 2021-02-03 19:40

    It turns out the print statements were actually getting through, but with delay.

    The gunicorn docs for --enable-stdio-inheritance note to set the PYTHONUNBUFFERED, which I thought I had, but it seems with wrong syntax.

    I solved it using a .env file with my foreman setup to set the variable like this:

    PYTHONUNBUFFERED=TRUE
    
    0 讨论(0)
  • 2021-02-03 19:45

    I use Python3 along with Flask.

    I use print('log info') directly instead of print('log info', flush=True).

    I only set capture_output to True and set a errorlog file and it works.

    Note that:

    capture_output

    --capture-output
    False
    Redirect stdout/stderr to specified file in errorlog

    I think it's that you need to specifiy a errorlog file to get the standard output.


    Here's my config file gunicorn.config.py setting

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

    Then run with gunicorn app_py:myapp -c gunicorn.config.py

    The equivaluent command line would be

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

    0 讨论(0)
提交回复
热议问题