I'm trying to add the extra fields of my logs as a key-value while keep using standard logging library along with structlog ProcessorFormatter.
Here is an example:
If we use JsonFormatter, extra fields are added as a key-value to the log.
With python-json-logger:
formatter = jsonlogger.JsonFormatter()
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logging.basicConfig(
level=logging.DEBUG,
handlers=[handler]
)
logger = logging.getLogger('testnameloger1')
logger.debug('testmsg2', extra={'extra2': 2})
console:
{"message": "testmsg2", "extra2": 2}
With rendering using structlog-based formatters within logging:
shared_processors = [
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.processors.TimeStamper(fmt='iso'),
]
formatter = structlog.stdlib.ProcessorFormatter(
processor=structlog.processors.JSONRenderer(),
foreign_pre_chain=shared_processors,
)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logging.basicConfig(
level=logging.DEBUG,
handlers=[handler]
)
logger = logging.getLogger('testnameloger1')
logger.debug('testmsg1', extra={'extra1': 1})
console:
{"event": "testmsg1", "logger": "testnameloger1", "level": "debug", "timestamp": "2020-06-16T13:33:50.881221Z"}
How can I add the extra fields in the log output ?
Logs I would want would be formatted like:
{"event": "testmsg1", "extra1": 1, "logger": "testnameloger1", "level": "debug", "timestamp": "2020-06-16T13:33:50.881221Z"}
Thank you for your insight