Is there a way to log python print statements in gunicorn?
Solution 1
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
Solution 2
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.
Solution 3
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.
-
Specify
--log-level
todebug
(defaultinfo
). -
Specify
--capture-output
flag (default false).
You should be able to watch logs in error log file.
Solution 4
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
Comments
-
kontur almost 2 years
With my Procfile like this:
web: gunicorn app:app \ --bind "$HOST:$PORT" \ --debug --error-logfile "-" \ --enable-stdio-inheritance \ --reload \ --log-level "debug"
is it in any way possible to get python
print
statements to be logged to stdout / bash? I am using thebottle
framework here as well, if that affects anything. -
FelikZ over 7 yearsEven though it is official way to do it - it does not work for unknown reason (python 2.7)
-
kontur almost 4 yearsIt doesn't seem convenient to change the app code to work around this.
-
Rami Alloush over 2 yearsNo way to auto create it?
FileNotFoundError: [Errno 2] No such file or directory: '/var/log/gunicorn/error.log'
-
Naveen Reddy Marthala over 2 yearsis there a way to redirect all stdout and stderr to a separate file than what's specified in
--error-log
?