Django JSON log formatter
Project description
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'})
The log file will contain the following log record (inline).
{ "message": "Sign up", "time": "2015-09-01T06:06:26.524448", "referral_code": "52d6ce" }
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for django-log-formatter-json-0.2.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8c7223b9af8d5111821b4b3be4d7346daed746f322f894768a918c58bf1f4bb3 |
|
MD5 | baf0ce2d7ef7803ea66715ebaacdb357 |
|
BLAKE2-256 | 4276a92d3887c501e8eda3406314b11fcb2b0c968921eb114ac50af2f7d7e6c7 |