Gunicorn: How do I print accesslog to STDOUT?

Created on 19 Jan 2016  ·  22Comments  ·  Source: benoitc/gunicorn

Hi,

http://docs.gunicorn.org/en/stable/settings.html#accesslog is telling me '-' will output to stderr but we prefer STDOUT for logging purposes. Is there a way to do that?

Thanks!

Documentation FeaturLogging

Most helpful comment

With the application file myapp.py, I tried the following.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

I can confirm that the access log output goes to stdout.

All 22 comments

The relevant line is here: https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() defaults to sys.stderr. Perhaps we could change accesslog to accept "stdout" and "stderr" as valid values and pass to logging.StreamHandler().

Another but less flexible solution:

The console handler already prints to sys.stdout: https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 We could set the handler to "console" for gunicorn.accesslog as we already did for gunicorn.error in https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55

I'm confused. Doesn't the StreamHandler already log on sys.stdout?

OK I understand now. Originally we were printing logs to stdout. IMO the access log should default to STDOUT. Thoughts?

@benoitc :+1:

Access log on stdout
Error log on stderr

any updates on this request?

@benoitc I am not sure this commit addresses this issue. Let us say I run, gunicorn myapp:app with no additional arguments. Is the expectation that gunicorn should log access records to standard output? If so, gunicorn doesn't do that.

In https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 without any command line arguments self.cfg.accesslog is None and the function returns early. As far as I can tell, there seems to be no way to log to stdout without specifing --log-config or --log-syslog. Is this correct?

by default access log is disabled if this is what you mean?

@benoitc Yes. The discussion above seems to indicate that access logs will go to stdout and error logs to stderr. However, it looks like access logging is disabled by default.

BTW, with Python 2.7 I used to be able to do --access-log /dev/stdout --error-log /dev/stderr and that would work. With Python 3, passing /dev/stdout as an argument fails in https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498

👍 @suriya I think I'm looking for the same behavior you are -- I'd like to run --capture-log and enable --access-logfile=<something>, but I'd prefer my access log lines go to stdout not stderr.

EDIT: To clarify, this appears to just be a problem with Python3. Using python3.5.1, passing --access-logfile=/dev/stdout to gunicorn fails to start the server.

Yes, it looks like access logging is disabled by default.

@huoxy More than what the default is, I think the issue is more that there is no simple way to write access logs to standard output.

@huoxy ˋ--access-logfile=-` should do the trick. let me k'ow if not.

@huoxy https://github.com/huoxy More than what the default is, I think
the issue is more that there is no simple way to write access logs to
standard output.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment-235501347,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

also it is probably a doc issue. but access log must be printed to stdout
when - is used. otherwise it is a bug. Let me know...
On Wed, 27 Jul 2016 at 09:03, Benoit Chesneau [email protected] wrote:

@huoxy ˋ--access-logfile=-` should do the trick. let me k'ow if not.

@huoxy https://github.com/huoxy More than what the default is, I think
the issue is more that there is no simple way to write access logs to
standard output.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment-235501347,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc As mentioned in #1293, gunicorn --access-log - logs accesses to standard error. I tried with gunicorn --access-log=- and the log still goes to standard error.

according to this:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

default logger is console which outputs to stdout, so I guess if you need everything to stdout like me, for everything to get to the gunicorn logging driver, you can just leave those options blank.

Also, the solution I would suggest, is to create a symbolic link for the log files to /dev/stdout or /dev/stderror if it does not work directly:

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 "$@"

I just moved to gunicorn 19.7.0 released last week. Unfortunately, I still can't get the access log written to anything other than stderr.

I've tried running gunicorn with no options and also with all permutations of including/not including "--access-logfile=- --error-logfile=- --log-level=DEBUG".

Am I missing something basic about gunicorn's logging? Is something from my environment or from Django possibly bleeding over and causing this problem?

With the application file myapp.py, I tried the following.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

I can confirm that the access log output goes to stdout.

I'm on Python 2.7.14. (Somehow missed the quick reply months ago.)

You can also use accesslog = "-" in your gunicorn.config.py

Was this page helpful?
0 / 5 - 0 ratings