Skip to content

Commit 0d80d0b

Browse files
committed
feat(utils): introduced flag to enable buffering
1 parent dff0c3c commit 0d80d0b

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

aws_lambda_powertools/logging/utils.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import logging
44
from typing import TYPE_CHECKING
55

6+
from aws_lambda_powertools.logging.buffer.handler import BufferingHandler
7+
68
if TYPE_CHECKING:
79
from collections.abc import Callable
810

@@ -16,6 +18,7 @@ def copy_config_to_registered_loggers(
1618
source_logger: Logger,
1719
log_level: int | str | None = None,
1820
ignore_log_level=False,
21+
include_buffering=False,
1922
exclude: set[str] | None = None,
2023
include: set[str] | None = None,
2124
) -> None:
@@ -30,6 +33,8 @@ def copy_config_to_registered_loggers(
3033
Logging level to set to registered loggers, by default uses source_logger logging level
3134
ignore_log_level: bool
3235
Whether to not touch log levels for discovered loggers. log_level param is disregarded when this is set.
36+
include_buffering: bool
37+
Whether to buffer logs from external libraries and report to powertools logger
3338
include : set[str] | None, optional
3439
List of logger names to include, by default all registered loggers are included
3540
exclude : set[str] | None, optional
@@ -64,7 +69,13 @@ def copy_config_to_registered_loggers(
6469

6570
registered_loggers = _find_registered_loggers(loggers=loggers, filter_func=filter_func)
6671
for logger in registered_loggers:
67-
_configure_logger(source_logger=source_logger, logger=logger, level=level, ignore_log_level=ignore_log_level)
72+
_configure_logger(
73+
source_logger=source_logger,
74+
logger=logger,
75+
level=level,
76+
ignore_log_level=ignore_log_level,
77+
include_buffering=include_buffering,
78+
)
6879

6980

7081
def _include_registered_loggers_filter(loggers: set[str]):
@@ -92,6 +103,7 @@ def _configure_logger(
92103
logger: logging.Logger,
93104
level: int | str,
94105
ignore_log_level: bool = False,
106+
include_buffering: bool = False,
95107
) -> None:
96108
# customers may not want to copy the same log level from Logger to discovered loggers
97109
if not ignore_log_level:
@@ -102,6 +114,17 @@ def _configure_logger(
102114
logger.propagate = False # ensure we don't propagate logs to existing loggers, #1073
103115
source_logger.append_keys(name="%(name)s") # include logger name, see #1267
104116

117+
buffer_config = getattr(source_logger, "_buffer_config", None)
118+
if include_buffering and buffer_config is not None:
119+
buffer_handler = BufferingHandler(
120+
buffer_cache=source_logger._buffer_cache,
121+
buffer_config=buffer_config,
122+
source_logger=source_logger,
123+
)
124+
logger.addHandler(buffer_handler)
125+
LOGGER.debug(f"Logger {logger} configured with BufferingHandler")
126+
return # exit earlier and don't add source handlers, would cause double logging
127+
105128
for source_handler in source_logger.handlers:
106129
logger.addHandler(source_handler)
107130
LOGGER.debug(f"Logger {logger} reconfigured to use {source_handler}")

0 commit comments

Comments
 (0)