JSON formatter for python logging
Project description
JSON formatter for logging
This module provides a JSON formatter for the python logging
module that will format to JSON formatted string.
Using this formatter allows to have the proper format for logging to Splunk
or ElasticSearch
, but it can also be used for logging to stdout as a string is issued.
Features
Adding additional fields and values
You can add fields to every message that is being logged.
To do so, specify the fields
parameter to the logging_json.JSONFormatter
instance.
It must be a dictionary where keys are the keys to be appended to the resulting JSON dictionary (if not already present) and the values can be one of the following:
- An attribute of the logging record (non-exhaustive list can be found on the python logging documentation).
- If not found on the record, the value will be linked to the key.
Logging exceptions, a specific case
If an exception is loggued, the exception
key will be appended to the resulting JSON dictionary.
This dictionary will contains 3 keys:
type
: The name of the exception class (useful when the message is blank).message
: The str representation of the exception (usually the provided error message).stack
: The stack trace, formatted as a string.
Logging with a dictionary
This formatter allows you to log dictionary as in the following:
import logging
logging.info({"key": "value", "other key": "other value"})
The resulting JSON dictionary will be the one you provided (with the additional fields).
Logging with anything else (such as a string)
Anything not logged using a dictionary will be handled by the standard formatter and it can result in one of the 2 output:
- A JSON dictionary, if additional fields are set or if
extra
parameter is used while logging, with the message available in themsg
key of the resulting JSON dictionary. - The formatted record, if no additional fields are set.
This handles the usual string logging as in the following:
import logging
logging.info("This is my message")
Configuration
You can create a formatter instance yourself as in the following or you can use a logging configuration.
import logging_json
formatter = logging_json.JSONFormatter(fields={
"level_name": "levelname",
"thread_name": "threadName",
"process_name": "processName"
})
Using logging.config.dictConfig
You can configure your logging as advertise by python, by using the logging.config.dictConfig
function.
dict configuration
import logging.config
import logging_json
import sys
formatter = logging_json.JSONFormatter(fields={
"level_name": "levelname",
"thread_name": "threadName",
"process_name": "processName"
})
handler = logging.StreamHandler(stream=sys.stdout)
handler.setFormatter(formatter)
logging.config.dictConfig({
"version": 1,
"formatters": {
"json": formatter
},
"handlers": {
"standard_output": handler,
},
"loggers": {
"my_app": {"level": "DEBUG"}
},
"root": {
"level": "INFO",
"handlers": ["standard_output"]
}
})
YAML logging configuration
You can use YAML to store your logging configuration, as in the following sample:
import logging.config
import yaml
with open("path/to/logging_configuration.yaml", "r") as config_file:
logging.config.dictConfig(yaml.load(config_file))
Where logging_configuration.yaml
can be a file containing the following sample:
version: 1
formatters:
json:
'()': logging_json.JSONFormatter
fields:
level_name: levelname
thread_name: threadName
process_name: processName
handlers:
standard_output:
class: logging.StreamHandler
formatter: json
stream: ext://sys.stdout
loggers:
my_app:
level: DEBUG
root:
level: INFO
handlers: [standard_output]
How to install
- python 3.6+ must be installed
- Use pip to install module:
python -m pip install logging_json
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
Built Distribution
Hashes for logging_json-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26bc924d029aa099abb53599b62e459d073de2badb7df128e1809af180c26c65 |
|
MD5 | 427c21296667236337654e8fdfc20bcf |
|
BLAKE2b-256 | 794379dbd62b96c31edf922cde5f006bdd38161d0b3308ad0bba15998e912657 |