python-json-logger icon indicating copy to clipboard operation
python-json-logger copied to clipboard

Nicer gunicorn json log message formatting

Open MartinThoma opened this issue 3 years ago • 2 comments

I use pythonjsonlogger for gunicorn by setting --log-config gunicorn_logging.conf when calling gunicorn.

I get a JSON log message:

{"asctime": "2020-12-07 02:36:29,798", \
  "name": "gunicorn.access", \
  "levelname": "INFO", \
  "message": "127.0.0.1 - - [07/Dec/2020:02:36:29 +0100] \"GET /spec HTTP/1.1\" 200 104065 \"http://localhost:9000/api/docs\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36\""}

What I don't like is that the structure is still hidden in the message and that the time is still in the message. I would like to get to this:

{"asctime": "2020-12-07 02:36:29,798", \
  "name": "gunicorn.access", \
  "levelname": "INFO", \
  "requester": "127.0.0.1", \
  "requested": "GET /spec", \
  "http_refererr": "http://localhost:9000/api/docs", \
  "response_code": 200, \
  "response_size": 104065, \
  "browser":  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", \
  "message": "GET /spec"}

Do you know how?

gunicorn_logging.config

My gunicorn_logging.config looks like this:

[loggers]
keys=root, gunicorn.error, gunicorn.access

[handlers]
keys=console

[formatters]
keys=json

[logger_root]
level=INFO
handlers=console

[logger_gunicorn.error]
level=ERROR
handlers=console
propagate=0
qualname=gunicorn.error

[logger_gunicorn.access]
level=INFO
handlers=console
propagate=0
qualname=gunicorn.access

[handler_console]
class=StreamHandler
formatter=json
args=(sys.stdout, )

[formatter_json]
class=pythonjsonlogger.jsonlogger.JsonFormatter
format=%(asctime)s %(name)s %(levelname)s %(message)s

MartinThoma avatar Dec 07 '20 01:12 MartinThoma

I've tried the ones from access_log_format on page 18, but the values were always null

MartinThoma avatar Dec 07 '20 01:12 MartinThoma

Posted a solution over at https://stackoverflow.com/a/70511781/8190553

will7200 avatar Dec 28 '21 19:12 will7200