Skip to main content

Json formatter for logging

Project description

logformatjson is a library that provides a simple JSON formatter for the standard python logging package. It allows for nested arbitrary metadata to be inserted at instantiation and run time. The library is opionanted but attempts to allow most opinions to be overridden.

warning: This library is under active development. The log format and API are expected to change.

https://circleci.com/gh/kumoru/logformatjson.svg?style=svg

Install

  • via pip:

pip install logformatjson

Examples

  1. basic usage - JSONFormatter can be set on any handler as your would expect:

import logging
import sys
from logformatjson import JSONFormatter

LOGGER = logging.getLogger()
LOGGER.setLevel(logging.DEBUG)
log_handler = logging.StreamHandler(sys.stdout)
log_handler.setFormatter(JSONFormatter())
LOGGER.addHandler(log_handler)

LOGGER.debug('this is my debug message', extra={'some_key': 'important_value'})

which produces the following json (from ipython):

{
  "timestamp": "2016-02-19T19:39:17.061886",
  "message": "this is my debug message",
  "levelname": "DEBUG",
  "metadata": {
    "filename": "test.py",
    "funcName": "<module>",
    "extra": {
      "some_key": "important_value"
    },
    "log_type": "python",
    "lineno": 11,
    "module": "test",
    "pathname": "test.py"
  },
  "log_version": "1.0"
}
  1. Adding an additional metadata in every log entry:


log_handler.setFormatter(JSONFormatter(metadata={'application_version': '1.0.0'}))
  1. Overriding the defaults at instantiation:

    • Override attributes copied or skipped from the LogRecord:
      
      log_handler.setFormatter(JSONFormatter(kept_attrs= ['created', ]))
      log_handler.setFormatter(JSONFormatter(skipped_attrs= ['filename', ]))
      
    • Override the provided json encoder:

      def my_json_encoder(obj):
        return int(obj)
      
      
      log_handler.setFormatter(JSONFormatter(json_encoder = my_json_encoder))
      
  2. Override the defaults at runtime:

    • Log type (intended to be mixed with extra fields):

      
      logger.debug('GET / HTTP/1.1', log_type='HTTP'}
      
  3. Extra fields:

    
    LOGGER.debug('this is my debug message', extra={'some_key': 'important_value'})
    

Tests

Tests can be run via make:

make lint
make test

Authors

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

logformatjson-0.1.0.tar.gz (4.7 kB view details)

Uploaded Source

File details

Details for the file logformatjson-0.1.0.tar.gz.

File metadata

  • Download URL: logformatjson-0.1.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for logformatjson-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7b28849f862e2ad08017d73267fb1208d60ef3e10cc60ce858e47a7bc3265483
MD5 f82f1d0fd4fc40baa161e4a45a8db052
BLAKE2b-256 11e940a8d955b069a3c70b6257eb4ff69e98bee6cde23fe50108aabcfdc112aa

See more details on using hashes here.

Supported by

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