From 2b32ab2fe2508f876e671eeb4206c37f30124e49 Mon Sep 17 00:00:00 2001
From: heitorlessa <lessa@amazon.co.uk>
Date: Fri, 1 Apr 2022 08:06:55 +0100
Subject: [PATCH 1/2] chore: add tests to reproduce regression

---
 tests/functional/test_logger.py | 36 +++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/tests/functional/test_logger.py b/tests/functional/test_logger.py
index 9bbc4452d98..d75bd005844 100644
--- a/tests/functional/test_logger.py
+++ b/tests/functional/test_logger.py
@@ -663,6 +663,42 @@ def handler(event, context):
     assert "my_key" not in second_log
 
 
+def test_clear_state_keeps_standard_keys(lambda_context, stdout, service_name):
+    # GIVEN
+    logger = Logger(service=service_name, stream=stdout)
+    standard_keys = ["level", "location", "message", "timestamp", "service"]
+
+    # WHEN clear_state is set
+    @logger.inject_lambda_context(clear_state=True)
+    def handler(event, context):
+        logger.info("Foo")
+
+    # THEN all standard keys should be available as usual
+    handler({}, lambda_context)
+
+    log = capture_logging_output(stdout)
+    for key in standard_keys:
+        assert key in log
+
+
+def test_clear_state_keeps_exception_keys(lambda_context, stdout, service_name):
+    # GIVEN
+    logger = Logger(service=service_name, stream=stdout)
+
+    # WHEN clear_state is set and an exception was logged
+    @logger.inject_lambda_context(clear_state=True)
+    def handler(event, context):
+        try:
+            raise ValueError("something went wrong")
+        except Exception:
+            logger.exception("Received an exception")
+
+    # THEN we expect a "exception_name" to be "ValueError"
+    handler({}, lambda_context)
+    log = capture_logging_output(stdout)
+    assert "ValueError" == log["exception_name"]
+
+
 def test_inject_lambda_context_allows_handler_with_kwargs(lambda_context, stdout, service_name):
     # GIVEN
     logger = Logger(service=service_name, stream=stdout)

From 80cb6ec0c2c0347317004388621b598935d2f4e8 Mon Sep 17 00:00:00 2001
From: heitorlessa <lessa@amazon.co.uk>
Date: Fri, 1 Apr 2022 08:18:46 +0100
Subject: [PATCH 2/2] fix(logger): ensure default keys are added when cleared

---
 aws_lambda_powertools/logging/formatter.py | 1 +
 tests/functional/test_logger.py            | 6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/aws_lambda_powertools/logging/formatter.py b/aws_lambda_powertools/logging/formatter.py
index 1b42df249ae..90799b84ed1 100644
--- a/aws_lambda_powertools/logging/formatter.py
+++ b/aws_lambda_powertools/logging/formatter.py
@@ -187,6 +187,7 @@ def remove_keys(self, keys: Iterable[str]):
 
     def clear_state(self):
         self.log_format = dict.fromkeys(self.log_record_order)
+        self.log_format.update(**self._build_default_keys())
 
     @staticmethod
     def _build_default_keys():
diff --git a/tests/functional/test_logger.py b/tests/functional/test_logger.py
index d75bd005844..de9de42601f 100644
--- a/tests/functional/test_logger.py
+++ b/tests/functional/test_logger.py
@@ -675,10 +675,12 @@ def handler(event, context):
 
     # THEN all standard keys should be available as usual
     handler({}, lambda_context)
+    handler({}, lambda_context)
 
-    log = capture_logging_output(stdout)
+    first_log, second_log = capture_multiple_logging_statements_output(stdout)
     for key in standard_keys:
-        assert key in log
+        assert key in first_log
+        assert key in second_log
 
 
 def test_clear_state_keeps_exception_keys(lambda_context, stdout, service_name):