12
12
from ..shared .functions import resolve_env_var_choice , resolve_truthy_env_var_choice
13
13
from .exceptions import InvalidLoggerSamplingRateError
14
14
from .filters import SuppressFilter
15
- from .formatter import BasePowertoolsFormatter , LambdaPowertoolsFormatter
15
+ from .formatter import RESERVED_FORMATTER_CUSTOM_KEYS , BasePowertoolsFormatter , LambdaPowertoolsFormatter
16
16
from .lambda_context import build_lambda_context_model
17
17
18
18
logger = logging .getLogger (__name__ )
@@ -82,7 +82,7 @@ class Logger(logging.Logger): # lgtm [py/missing-call-to-init]
82
82
datefmt: str, optional
83
83
String directives (strftime) to format log timestamp using `time`, by default it uses RFC
84
84
3339.
85
- use_datetime_directive: str , optional
85
+ use_datetime_directive: bool , optional
86
86
Interpret `datefmt` as a format string for `datetime.datetime.strftime`, rather than
87
87
`time.strftime`.
88
88
@@ -368,7 +368,7 @@ def registered_handler(self) -> logging.Handler:
368
368
return handlers [0 ]
369
369
370
370
@property
371
- def registered_formatter (self ) -> PowertoolsFormatter :
371
+ def registered_formatter (self ) -> BasePowertoolsFormatter :
372
372
"""Convenience property to access logger formatter"""
373
373
return self .registered_handler .formatter # type: ignore
374
374
@@ -395,7 +395,15 @@ def structure_logs(self, append: bool = False, **keys):
395
395
is_logger_preconfigured = getattr (self ._logger , "init" , False )
396
396
if not is_logger_preconfigured :
397
397
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 )
399
407
400
408
# Mode 2 (legacy)
401
409
if append :
0 commit comments