Skip to content

Instantly share code, notes, and snippets.

@smola
Created July 26, 2018 08:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smola/60f07340a4dbf72f4e425e12181d16d2 to your computer and use it in GitHub Desktop.
Save smola/60f07340a4dbf72f4e425e12181d16d2 to your computer and use it in GitHub Desktop.
quick example on structured logging approaches for Python
#!/usr/bin/env python3
import logging
# setting up a JSON formatter for standard library
from pythonjsonlogger import jsonlogger
logger = logging.getLogger()
logHandler = logging.StreamHandler()
formatter = jsonlogger.JsonFormatter()
logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
logger.setLevel(logging.DEBUG)
# structlug setup for nicer API
# structlog will use standard library logging under the hood
import structlog
structlog.configure(
processors=[
structlog.stdlib.filter_by_level,
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
structlog.processors.StackInfoRenderer(),
structlog.processors.format_exc_info,
structlog.processors.UnicodeDecoder(),
structlog.stdlib.render_to_log_kwargs,
],
context_class=dict,
logger_factory=structlog.stdlib.LoggerFactory(),
wrapper_class=structlog.stdlib.BoundLogger,
cache_logger_on_first_use=True,
)
logger.info('standard call, foo: %s', 'bar')
logger.info('standard call with extra dict', extra={'foo': 'bar'})
structlog.get_logger('test').info('structlog call', foo='bar')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment