multistructlog
This module is a thin wrapper around Structlog that sets and provides defaults for sending logs to one or more logging destinations with individual formatting per destination.
The API consists of a single function: create_logger()
.
- Args:
logging_config (dict): Input to logging.config.dictConfig
level(logging.loglevel): Overrides logging level for all loggers (not handlers!)
- Returns:
- log: structlog Logger object
It can be invoked as follows:
logging_config = ...
log = multistructlog.create_logger(config, level=logging.INFO)
log.info('Entered function', foo='bar')
To create a logging_config
dictionary, see these docs:
- https://docs.python.org/2.7/library/logging.config.html#logging.config.dictConfig
- http://www.structlog.org/en/stable/standard-library.html#rendering-using-structlog-based-formatters-within-logging
There are no required arguments to create_logger() - any missing parts of the config will be filled in with defaults that print structured logs to the console.
If you don't specify a formatters
section in your config, three will be
created which can be used in handlers:
json
: renders one JSON dictionary per messagestructured
: prints structured logs with thestructlog.dev.ConsoleRenderer
structured-color
: same asstructured
but with forced color output
If you don't specify a handlers
section, a handler will be added that logs
to console with logging.StreamHandler
with format structured
at level
DEBUG
.
If you don't specify a loggers
section, a default logger (empty string)
will be created with all items in handlers
added to it, with a level of
NOTSET
(every level printed).
When setting log level, the higher of logging_config['loggers'][*]['level']
and logging_config['handlers'][*]['level']
is used. The level
parameter
overrides the loggers
value of level, not the handlers
level.
If the handler's level is set to DEBUG
but the logger's level is set to
ERROR
, the handler will be overridden and only log ERROR
level messages.
Multistructlog also adds a TRACE
log level (integer level 5) that is below
"DEBUG" to both standard library Logger
and Structlog BoundLogger
.
- List of standard logging levels:
- https://docs.python.org/2.7/library/logging.html#logging-levels
Changelog
1.x versions
- legacy
2.0.0
- Substantial refactor/rewrite
- Cache logger objects
- Add trace levels
2.1.0
- Force color on when using structured-color formatter
- Print timestamp and loglevel by default
- Fix issues with reinitialziaton of logger