1212from ..shared .functions import resolve_env_var_choice , resolve_truthy_env_var_choice
1313from .exceptions import InvalidLoggerSamplingRateError
1414from .filters import SuppressFilter
15- from .formatter import BasePowertoolsFormatter , LambdaPowertoolsFormatter
15+ from .formatter import RESERVED_FORMATTER_CUSTOM_KEYS , BasePowertoolsFormatter , LambdaPowertoolsFormatter
1616from .lambda_context import build_lambda_context_model
1717
1818logger = logging .getLogger (__name__ )
@@ -82,7 +82,7 @@ class Logger(logging.Logger): # lgtm [py/missing-call-to-init]
8282 datefmt: str, optional
8383 String directives (strftime) to format log timestamp using `time`, by default it uses RFC
8484 3339.
85- use_datetime_directive: str , optional
85+ use_datetime_directive: bool , optional
8686 Interpret `datefmt` as a format string for `datetime.datetime.strftime`, rather than
8787 `time.strftime`.
8888
@@ -368,7 +368,7 @@ def registered_handler(self) -> logging.Handler:
368368 return handlers [0 ]
369369
370370 @property
371- def registered_formatter (self ) -> PowertoolsFormatter :
371+ def registered_formatter (self ) -> BasePowertoolsFormatter :
372372 """Convenience property to access logger formatter"""
373373 return self .registered_handler .formatter # type: ignore
374374
@@ -395,7 +395,15 @@ def structure_logs(self, append: bool = False, **keys):
395395 is_logger_preconfigured = getattr (self ._logger , "init" , False )
396396 if not is_logger_preconfigured :
397397 formatter = self .logger_formatter or LambdaPowertoolsFormatter (** log_keys ) # type: ignore
398- return self .registered_handler .setFormatter (formatter )
398+ self .registered_handler .setFormatter (formatter )
399+
400+ # when using a custom Lambda Powertools Formatter
401+ # standard and custom keys that are not Powertools Formatter parameters should be appended
402+ # and custom keys that might happen to be Powertools Formatter parameters should be discarded
403+ # this prevents adding them as custom keys, for example, `json_default=<callable>`
404+ # see https://github.com/awslabs/aws-lambda-powertools-python/issues/1263
405+ custom_keys = {k : v for k , v in log_keys .items () if k not in RESERVED_FORMATTER_CUSTOM_KEYS }
406+ return self .registered_formatter .append_keys (** custom_keys )
399407
400408 # Mode 2 (legacy)
401409 if append :
0 commit comments