Module aws_lambda_powertools.logging.utils

Functions

def copy_config_to_registered_loggers(source_logger: Logger,
log_level: int | str | None = None,
ignore_log_level=False,
exclude: set[str] | None = None,
include: set[str] | None = None) ‑> None
Expand source code
def copy_config_to_registered_loggers(
    source_logger: Logger,
    log_level: int | str | None = None,
    ignore_log_level=False,
    exclude: set[str] | None = None,
    include: set[str] | None = None,
) -> None:
    """Copies source Logger level and handler to all registered loggers for consistent formatting.

    Parameters
    ----------
    ignore_log_level
    source_logger : Logger
        Powertools for AWS Lambda (Python) Logger to copy configuration from
    log_level : int | str, optional
        Logging level to set to registered loggers, by default uses source_logger logging level
    ignore_log_level: bool
        Whether to not touch log levels for discovered loggers. log_level param is disregarded when this is set.
    include : set[str] | None, optional
        List of logger names to include, by default all registered loggers are included
    exclude : set[str] | None, optional
        List of logger names to exclude, by default None
    """
    level = log_level or source_logger.log_level

    # Assumptions: Only take parent loggers not children (dot notation rule)
    # Steps:
    # 1. Default operation: Include all registered loggers
    # 2. Only include set? Only add Loggers in the list and ignore all else
    # 3. Include and exclude set? Add Logger if it’s in include and not in exclude
    # 4. Only exclude set? Ignore Logger in the excluding list

    # Exclude source and Powertools for AWS Lambda (Python) package logger by default
    # If source logger is a child ensure we exclude parent logger to not break child logger
    # from receiving/pushing updates to keys being added/removed
    source_logger_name = source_logger.name.split(".")[0]

    if exclude:
        exclude.update([source_logger_name, PACKAGE_LOGGER])
    else:
        exclude = {source_logger_name, PACKAGE_LOGGER}

    # Prepare loggers set
    if include:
        loggers = include.difference(exclude)
        filter_func = _include_registered_loggers_filter
    else:
        loggers = exclude
        filter_func = _exclude_registered_loggers_filter

    registered_loggers = _find_registered_loggers(loggers=loggers, filter_func=filter_func)
    for logger in registered_loggers:
        _configure_logger(source_logger=source_logger, logger=logger, level=level, ignore_log_level=ignore_log_level)

Copies source Logger level and handler to all registered loggers for consistent formatting.

Parameters

ignore_log_level
 
source_logger : Logger
Powertools for AWS Lambda (Python) Logger to copy configuration from
log_level : int | str, optional
Logging level to set to registered loggers, by default uses source_logger logging level
ignore_log_level : bool
Whether to not touch log levels for discovered loggers. log_level param is disregarded when this is set.
include : set[str] | None, optional
List of logger names to include, by default all registered loggers are included
exclude : set[str] | None, optional
List of logger names to exclude, by default None