Bunyan python logger
Project description
python-bunyan
Json logger compatible with node-bunyan
Get the code
git clone git@github.com:uphold/python-bunyan.git
Install
pip install bunyan
How to setup
Programatically
Create a new log handler and assign a BunyanFormatter formatter. Register the handler on the current logger.
import bunyan
import logging
import sys
logger = logging.getLogger()
logHandler = logging.StreamHandler(stream = sys.stdout)
formatter = bunyan.BunyanFormatter()
logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
logger.setLevel(logging.DEBUG)
Using dictConfig
This is the same example as defined above, but using a dictionary with dictConfig.
LOG_CONFIG = {
'formatters': {
'bunyan': {
'()' : 'bunyan.BunyanFormatter'
}
},
'handlers': {
'debug': {
'class': 'logging.StreamHandler',
'formatter': 'bunyan',
'stream': 'ext://sys.stdout'
},
},
'root': {
'level': 'DEBUG',
'handlers': ['debug']
},
'version': 1
}
import logging.config
logging.config.dictConfig(config)
How to use
After setting up your loggers, bunyan allows to log in two different ways: - Traditional - Using a dictionary
Traditional logging
String message
Traditionaly logging in python allows to log a string message.
logger.debug("This is a log message")
This will output:
{
"name": "root",
"pathname": "test.py",
"levelname": "DEBUG",
"msg": "This is a log message",
"time": "2016-03-14T16:34:47Z",
"hostname": "jalpedrinha-mbp.local",
"level": 20,
"pid": 41414,
"v": 0
}
String message with extra dictionary
This module extends this functionality by allowing an extra keyword arg, and passing a dictionary.
logger.debug("This is a log message with extra context", extra = {'some': 'additional data'})
And the output will include some key and value:
{
"name": "root",
"time": "2016-03-14T16:36:12Z",
"some": "additional data",
"pathname": "test.py",
"msg": "This is a log message with extra context",
"levelname": "DEBUG",
"hostname": "jalpedrinha-mbp.local",
"level": 20,
"pid": 41495,
"v": 0
}
Dictionary
This method works similarly to using an extra dictionary without the string message, but instead of passing a keyword argument extra, you just pass the first positional argument as a dictionary.
logger.debug({'some': 'data'})
Which results in:
{
"name": "root",
"some": "data",
"pathname": "test.py",
"msg": "",
"time": "2016-03-14T16:45:23Z",
"levelname": "DEBUG",
"hostname": "jalpedrinha-mbp.local",
"level": 20,
"pid": 43263,
"v": 0
}
Testing
Docker-compose and tox
Run tox container:
docker-compose up
Natively
First, install dev-requirements
pip install -r dev-requirements.txt
Then run nose:
nosetests tests
Changelog
0.1.0 / 2016-03-15
#2 Add Bunyan Formatter (@jAlpedrinha)
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.