How do I print accesslog to STDOUT? #1184

Closed
mrlamroger opened this Issue Jan 19, 2016 · 16 comments

Projects

None yet

8 participants

@mrlamroger

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!

@berkerpeksag
Collaborator

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().

@berkerpeksag
Collaborator

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

@benoitc
Owner
benoitc commented Jan 19, 2016

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

@benoitc
Owner
benoitc commented Jan 22, 2016

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

@tilgovi
Collaborator
tilgovi commented Feb 11, 2016

@benoitc 👍

Access log on stdout
Error log on stderr

@emanuelcds

any updates on this request?

@benoitc benoitc closed this in 65db610 May 2, 2016
@suriya
Contributor
suriya commented May 11, 2016

@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?

@benoitc
Owner
benoitc commented May 30, 2016

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

@suriya
Contributor
suriya commented May 30, 2016

@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

@amilstead
amilstead commented Jul 13, 2016 edited

👍 @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.

@huoxy
huoxy commented Jul 26, 2016

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

@suriya
Contributor
suriya commented Jul 27, 2016

@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.

@benoitc
Owner
benoitc commented Jul 27, 2016

@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
#1184 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc
Owner
benoitc commented Jul 27, 2016

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 bchesneau@gmail.com 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
#1184 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@suriya
Contributor
suriya commented Jul 27, 2016

@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.

@benoitc benoitc added a commit that referenced this issue Jul 27, 2016
@benoitc make sure access logs are printed to stdout
logging.StreamHandler deault to sys.stderr, so make sure access log are printed to stdout when choosing "-" by forcing the stream.

Note: access logs were printed to stdout by default when using the config file.

fix #1184
df84d3d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment