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.
Source Distribution
File details
Details for the file bunyan-0.1.2.tar.gz
.
File metadata
- Download URL: bunyan-0.1.2.tar.gz
- Upload date:
- Size: 8.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e49e112b14cffa92c2a4e0e0052eac43a811f6ec594601f871b82355dc66432a |
|
MD5 | f410281d26ec62dc61ddd5046998c23a |
|
BLAKE2b-256 | becd661e57aca2dc0d1548112c65e6cccf185ea16421d95438bed2d28a0f138f |