diff --git a/aws_lambda_powertools/logging/logger.py b/aws_lambda_powertools/logging/logger.py index c242f5c9bd4..ab29b6af649 100644 --- a/aws_lambda_powertools/logging/logger.py +++ b/aws_lambda_powertools/logging/logger.py @@ -285,7 +285,11 @@ def _init_logger( # b) different sampling mechanisms # c) multiple messages from being logged as handlers can be duplicated is_logger_preconfigured = getattr(self._logger, LOGGER_ATTRIBUTE_PRECONFIGURED, False) - if self.child or is_logger_preconfigured: + if self.child: + self.setLevel(log_level) + return + + if is_logger_preconfigured: return self.setLevel(log_level) diff --git a/tests/functional/logger/required_dependencies/test_logger.py b/tests/functional/logger/required_dependencies/test_logger.py index 70f08f1bbdd..5c85677d73d 100644 --- a/tests/functional/logger/required_dependencies/test_logger.py +++ b/tests/functional/logger/required_dependencies/test_logger.py @@ -1217,3 +1217,18 @@ def remove_keys(self, keys: Iterable[str]) -> None: # THEN the context keys should not persist current_keys = logger.get_current_keys() assert current_keys == {} + + +def test_logger_change_level_child_logger(stdout, service_name): + # GIVEN a new Logger and child Logger + logger = Logger(service=service_name, stream=stdout) + child_logger = Logger(service=service_name, child=True, stream=stdout, level="DEBUG") + + # WHEN we emit logs for both in DEBUG level + logger.debug("PARENT") + child_logger.debug("CHILD") + + # THEN only child log must emit log due to level + logs = list(stdout.getvalue().strip().split("\n")) + assert len(logs) == 1 + assert "service" in logs[0]