Source code for press.logging

import logging.config
import uuid

import structlog


def _create_id(request):
    """Request attribute factory for creating a unique id."""
    return str(uuid.uuid4())


def _create_logger(request):
    """Request attribute factory to give access to the logger."""
    logger = structlog.get_logger("press.request")
    logger = logger.bind(request_id=request.id)
    return logger


[docs]def includeme(config): """Configure logging for the application""" logging.config.dictConfig({ 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'NOTSET', 'stream': 'ext://sys.stdout', }, }, 'root': { 'level': config.registry.settings.get('logging.level', 'INFO'), 'handlers': ['console'], }, }) 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.TimeStamper(fmt="%Y-%m-%d %H:%M.%S", utc=False), structlog.processors.KeyValueRenderer(), ], logger_factory=structlog.stdlib.LoggerFactory(), wrapper_class=structlog.stdlib.BoundLogger, ) logger = structlog.get_logger('press.logging') logger.info('logging configuration initialized') logger.debug('debug logging enabled') # Give every request a unique identifier. config.add_request_method(_create_id, name="id", reify=True) # Add a log method to every request. config.add_request_method(_create_logger, name="log", reify=True)