Skip to main content

JSON log formatter

Project description

https://travis-ci.org/marselester/json-log-formatter.png

The library helps you to store logs in JSON format. Why is it important? Well, it facilitates integration with Logstash.

Usage example:

import logging

import json_log_formatter

formatter = json_log_formatter.JSONFormatter()

json_handler = logging.FileHandler(filename='/var/log/my-log.json')
json_handler.setFormatter(formatter)

logger = logging.getLogger('my_json')
logger.addHandler(json_handler)
logger.setLevel(logging.INFO)

logger.info('Sign up', extra={'referral_code': '52d6ce'})

try:
    raise ValueError('something wrong')
except ValueError:
    logger.error('Request failed', exc_info=True)

The log file will contain the following log record (inline).

{
    "message": "Sign up",
    "time": "2015-09-01T06:06:26.524448",
    "referral_code": "52d6ce"
}
{
    "message": "Request failed",
    "time": "2015-09-01T06:06:26.524449",
    "exc_info": "Traceback (most recent call last): ..."
}

JSON libraries

You can use ujson or simplejson instead of built-in json library. They are faster and can serialize Decimal values.

import json_log_formatter
import ujson

formatter = json_log_formatter.JSONFormatter()
formatter.json_lib = ujson

Django integration

Here is an example of how the JSON formatter can be used with Django.

LOGGING['formatters']['json'] = {
    '()': 'json_log_formatter.JSONFormatter',
}
LOGGING['handlers']['json_file'] = {
    'level': 'INFO',
    'class': 'logging.FileHandler',
    'filename': '/var/log/my-log.json',
    'formatter': 'json',
}
LOGGING['loggers']['my_json'] = {
    'handlers': ['json_file'],
    'level': 'INFO',
}

Let’s try to log something.

import logging

logger = logging.getLogger('my_json')

logger.info('Sign up', extra={'referral_code': '52d6ce'})

Custom formatter

You will likely need a custom log format. For instance, you want to log a user ID, an IP address and time as django.utils.timezone.now(). To do so you should override JSONFormatter.json_record().

class CustomisedJSONFormatter(json_log_formatter.JSONFormatter):
    def json_record(self, message, extra, record):
        extra['message'] = message
        extra['user_id'] = current_user_id()
        extra['ip'] = current_ip()
        if 'time' not in extra:
            extra['time'] = django.utils.timezone.now()
        return extra

Let’s say you want datetime to be serialized as timestamp. Then you should use ujson (which does it by default) and disable ISO8601 date mutation.

class CustomisedJSONFormatter(json_log_formatter.JSONFormatter):
    json_lib = ujson

    def mutate_json_record(self, json_record):
        return json_record

Tests

$ pip install -r requirements.txt
$ tox

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

JSON-log-formatter-0.2.0.tar.gz (3.4 kB view details)

Uploaded Source

Built Distribution

JSON_log_formatter-0.2.0-py2-none-any.whl (5.7 kB view details)

Uploaded Python 2

File details

Details for the file JSON-log-formatter-0.2.0.tar.gz.

File metadata

File hashes

Hashes for JSON-log-formatter-0.2.0.tar.gz
Algorithm Hash digest
SHA256 cdc1f1dabc0b9c808ed4e4f26e73885a9e7955bf7190dd9f1b86be967feb5b29
MD5 4ed6080fb65704d856691260e19cacff
BLAKE2b-256 402503b613db3ef5a3acc778d170573b35985b246e995061657afdbc1341ed8e

See more details on using hashes here.

File details

Details for the file JSON_log_formatter-0.2.0-py2-none-any.whl.

File metadata

File hashes

Hashes for JSON_log_formatter-0.2.0-py2-none-any.whl
Algorithm Hash digest
SHA256 8bb02773a37274c08f4de748e3accbed269c8395d27149bc2e7e9109af342eee
MD5 8fa4b8704bd23ebd653185862648b259
BLAKE2b-256 1759496f7b4321d2b8d3cfa6d59459a2811747f37bdd5ceb73d913af019fc6ce

See more details on using hashes here.

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