Skip to main content

Simple library to emit json formatted logs to stdout

Project description

https://img.shields.io/pypi/v/sanic-json-logging.svg https://img.shields.io/travis/terrycain/sanic-json-logging.svg Code coverage Updates

The other day I was running some containers on Amazon’s ECS and logging to cloudwatch. I then learnt cloudwatch parses JSON logs so obviously I then wanted Sanic to log out JSON.

Ideally this’ll be useful to people but if it isn’t, raise an issue and we’ll make it better :)

To install:

pip install sanic-json-logging

Look at examples/simple.py for a full working example, but this will essentially get you going

from sanic_json_logging import setup_json_logging, NoAccessLogSanic

app = NoAccessLogSanic('app1')
setup_json_logging(app)

The reason NoAccessLogSanic is used instead of Sanic is to disable the default access logger (it also disabled the LOGO).

setup_json_logging does the following:

  • changes the default log formatters to JSON ones

  • also filters out no Keepalive warnings

  • unless told otherwise, will change the asyncio task factory, to implement some rudimentary task-local storage.

  • installs pre and post request middleware. Pre-request middleware to time tasks and generate a uuid4 request id. Post-request middleware to emit access logs.

  • will use AWS X-Forwarded-For IPs in the access logs if present

If setup_json_logging changed the task factory, all tasks created from the request’s task will contain the request ID.

Currently I have it outputting access logs like

{
  "timestamp": "2018-06-09T17:42:52.195701Z",
  "level": "INFO",
  "method": "GET",
  "path": "/endpoint1",
  "remote": "127.0.0.1:33468",
  "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36",
  "host": "localhost:8000",
  "response_time": 0.0,
  "req_id": "795617c7-b514-4ed9-bb63-cc4fcd883c3d",
  "logger": "sanic.access",
  "status_code": 200,
  "length": 0,
  "type": "access"
}

And if you log to the root logger, inside a request, it’ll look like this.

{
  "timestamp": "2018-06-09T17:42:52.195326Z",
  "level": "INFO",
  "message": "some informational message",
  "type": "log",
  "logger": "root",
  "filename": "simple.py",
  "lineno": 16,
  "req_id": "795617c7-b514-4ed9-bb63-cc4fcd883c3d"
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sanic-json-logging-0.3.1.tar.gz (5.3 kB view hashes)

Uploaded Source

Built Distribution

sanic_json_logging-0.3.1-py3-none-any.whl (6.0 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page