Skip to content

Commit f1892d9

Browse files
committed
fix(logger): clear_state as abstract method
1 parent 573d6f9 commit f1892d9

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

aws_lambda_powertools/logging/formatter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def append_keys(self, **additional_keys):
4545
def remove_keys(self, keys: Iterable[str]):
4646
raise NotImplementedError()
4747

48+
@abstractmethod
4849
def clear_state(self):
4950
"""Removes any previously added logging keys"""
5051
raise NotImplementedError()

aws_lambda_powertools/logging/logger.py

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -386,28 +386,25 @@ def structure_logs(self, append: bool = False, **keys):
386386
append keys provided to logger formatter, by default False
387387
"""
388388
# There are 3 operational modes for this method
389-
## 1. Append new keys to the current logger formatter; deprecated in favour of append_keys
390-
## 2. Register a Powertools Formatter for the first time
389+
## 1. Register a Powertools Formatter for the first time
390+
## 2. Append new keys to the current logger formatter; deprecated in favour of append_keys
391391
## 3. Add new keys and discard existing to the registered formatter
392392

393-
if append:
394-
# Maintenance: Add deprecation warning for major version
395-
return self.append_keys(**keys)
396-
393+
# Mode 1
397394
log_keys = {**self._default_log_keys, **keys}
398-
399-
# Behaviour 2
400395
is_logger_preconfigured = getattr(self._logger, "init", False)
401396
if not is_logger_preconfigured:
402397
formatter = self.logger_formatter or LambdaPowertoolsFormatter(**log_keys) # type: ignore
403398
return self.registered_handler.setFormatter(formatter)
404399

405-
# Behaviour 3
406-
try:
407-
self.registered_formatter.clear_state()
408-
self.registered_formatter.append_keys(**log_keys)
409-
except (AttributeError, NotImplementedError):
410-
logger.warning(f"Formatter {self.registered_formatter} doesn't implement clear_state method; ignoring...")
400+
# Mode 2 (legacy)
401+
if append:
402+
# Maintenance: Add deprecation warning for major version
403+
return self.append_keys(**keys)
404+
405+
# Mode 3
406+
self.registered_formatter.clear_state()
407+
self.registered_formatter.append_keys(**log_keys)
411408

412409
def set_correlation_id(self, value: Optional[str]):
413410
"""Sets the correlation_id in the logging json

tests/functional/test_logger.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,9 @@ def remove_keys(self, keys: Iterable[str]):
525525
for key in keys:
526526
self.custom_format.pop(key, None)
527527

528+
def clear_state(self):
529+
self.custom_format.clear()
530+
528531
def format(self, record: logging.LogRecord) -> str: # noqa: A003
529532
return json.dumps(
530533
{

0 commit comments

Comments
 (0)