Skip to content

Commit a88f535

Browse files
authored
fix(logger): clear_state regression on absent standard keys (#1088)
1 parent 09f98f8 commit a88f535

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

aws_lambda_powertools/logging/formatter.py

+1
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ def remove_keys(self, keys: Iterable[str]):
187187

188188
def clear_state(self):
189189
self.log_format = dict.fromkeys(self.log_record_order)
190+
self.log_format.update(**self._build_default_keys())
190191

191192
@staticmethod
192193
def _build_default_keys():

tests/functional/test_logger.py

+38
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,44 @@ def handler(event, context):
663663
assert "my_key" not in second_log
664664

665665

666+
def test_clear_state_keeps_standard_keys(lambda_context, stdout, service_name):
667+
# GIVEN
668+
logger = Logger(service=service_name, stream=stdout)
669+
standard_keys = ["level", "location", "message", "timestamp", "service"]
670+
671+
# WHEN clear_state is set
672+
@logger.inject_lambda_context(clear_state=True)
673+
def handler(event, context):
674+
logger.info("Foo")
675+
676+
# THEN all standard keys should be available as usual
677+
handler({}, lambda_context)
678+
handler({}, lambda_context)
679+
680+
first_log, second_log = capture_multiple_logging_statements_output(stdout)
681+
for key in standard_keys:
682+
assert key in first_log
683+
assert key in second_log
684+
685+
686+
def test_clear_state_keeps_exception_keys(lambda_context, stdout, service_name):
687+
# GIVEN
688+
logger = Logger(service=service_name, stream=stdout)
689+
690+
# WHEN clear_state is set and an exception was logged
691+
@logger.inject_lambda_context(clear_state=True)
692+
def handler(event, context):
693+
try:
694+
raise ValueError("something went wrong")
695+
except Exception:
696+
logger.exception("Received an exception")
697+
698+
# THEN we expect a "exception_name" to be "ValueError"
699+
handler({}, lambda_context)
700+
log = capture_logging_output(stdout)
701+
assert "ValueError" == log["exception_name"]
702+
703+
666704
def test_inject_lambda_context_allows_handler_with_kwargs(lambda_context, stdout, service_name):
667705
# GIVEN
668706
logger = Logger(service=service_name, stream=stdout)

0 commit comments

Comments
 (0)