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'})
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
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
Built Distribution
File details
Details for the file JSON-log-formatter-0.2.0.tar.gz
.
File metadata
- Download URL: JSON-log-formatter-0.2.0.tar.gz
- Upload date:
- Size: 3.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cdc1f1dabc0b9c808ed4e4f26e73885a9e7955bf7190dd9f1b86be967feb5b29 |
|
MD5 | 4ed6080fb65704d856691260e19cacff |
|
BLAKE2b-256 | 402503b613db3ef5a3acc778d170573b35985b246e995061657afdbc1341ed8e |
File details
Details for the file JSON_log_formatter-0.2.0-py2-none-any.whl
.
File metadata
- Download URL: JSON_log_formatter-0.2.0-py2-none-any.whl
- Upload date:
- Size: 5.7 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8bb02773a37274c08f4de748e3accbed269c8395d27149bc2e7e9109af342eee |
|
MD5 | 8fa4b8704bd23ebd653185862648b259 |
|
BLAKE2b-256 | 1759496f7b4321d2b8d3cfa6d59459a2811747f37bdd5ceb73d913af019fc6ce |