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 LambdaPowertoolsFormatter
15
+ from .formatter import BasePowertoolsFormatter , LambdaPowertoolsFormatter
16
16
from .lambda_context import build_lambda_context_model
17
17
18
18
logger = logging .getLogger (__name__ )
@@ -124,6 +124,7 @@ def __init__(
124
124
child : bool = False ,
125
125
sampling_rate : float = None ,
126
126
stream : sys .stdout = None ,
127
+ logger_formatter : Optional [BasePowertoolsFormatter ] = None ,
127
128
** kwargs ,
128
129
):
129
130
self .service = resolve_env_var_choice (
@@ -132,11 +133,12 @@ def __init__(
132
133
self .sampling_rate = resolve_env_var_choice (
133
134
choice = sampling_rate , env = os .getenv (constants .LOGGER_LOG_SAMPLING_RATE )
134
135
)
136
+ self .child = child
137
+ self .logger_formatter = logger_formatter
138
+ self .log_level = self ._get_log_level (level )
135
139
self ._is_deduplication_disabled = resolve_truthy_env_var_choice (
136
140
env = os .getenv (constants .LOGGER_LOG_DEDUPLICATION_ENV , "false" )
137
141
)
138
- self .log_level = self ._get_log_level (level )
139
- self .child = child
140
142
self ._handler = logging .StreamHandler (stream ) or logging .StreamHandler (sys .stdout )
141
143
self ._default_log_keys = {"service" : self .service , "sampling_rate" : self .sampling_rate }
142
144
self ._logger = self ._get_logger ()
@@ -292,13 +294,13 @@ def remove_keys(self, keys: Iterable[str]):
292
294
293
295
@property
294
296
def registered_handler (self ) -> logging .Handler :
295
- """Registered Logger handler"""
297
+ """Convenience property to access logger handler"""
296
298
handlers = self ._logger .parent .handlers if self .child else self ._logger .handlers
297
299
return handlers [0 ]
298
300
299
301
@property
300
- def registered_formatter (self ) -> Optional [LambdaPowertoolsFormatter ]:
301
- """Registered Logger formatter"""
302
+ def registered_formatter (self ) -> Optional [BasePowertoolsFormatter ]:
303
+ """Convenience property to access logger formatter"""
302
304
return self .registered_handler .formatter
303
305
304
306
def structure_logs (self , append : bool = False , ** keys ):
@@ -312,15 +314,16 @@ def structure_logs(self, append: bool = False, **keys):
312
314
Parameters
313
315
----------
314
316
append : bool, optional
315
- [description] , by default False
317
+ append keys provided to logger formatter , by default False
316
318
"""
317
319
318
320
if append :
319
321
# Maintenance: Add deprecation warning for major version. Refer to append_keys() when docs are updated
320
322
self .append_keys (** keys )
321
323
else :
322
- # Set a new formatter for a logger handler
323
- self .registered_handler .setFormatter (LambdaPowertoolsFormatter (** self ._default_log_keys , ** keys ))
324
+ log_keys = {** self ._default_log_keys , ** keys }
325
+ formatter = self .logger_formatter or LambdaPowertoolsFormatter (** log_keys )
326
+ self .registered_handler .setFormatter (formatter )
324
327
325
328
def set_correlation_id (self , value : str ):
326
329
"""Sets the correlation_id in the logging json
0 commit comments