Skip to content

Commit 18ac4ae

Browse files
authored
feat(logger): include logger name attribute when copy_config_to_registered_logger is used (#1568)
1 parent f04884d commit 18ac4ae

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

aws_lambda_powertools/logging/utils.py

+2
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ def _configure_logger(source_logger: Logger, logger: logging.Logger, level: Unio
8181
logger.handlers = []
8282
logger.setLevel(level)
8383
logger.propagate = False # ensure we don't propagate logs to existing loggers, #1073
84+
source_logger.append_keys(name="%(name)s") # include logger name, see #1267
85+
8486
source_logger.debug(f"Logger {logger} reconfigured to use logging level {level}")
8587
for source_handler in source_logger.handlers:
8688
logger.addHandler(source_handler)

docs/core/logger.md

+3
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,9 @@ for the given name and level to the logging module. By default, this logs all bo
608608

609609
You can copy the Logger setup to all or sub-sets of registered external loggers. Use the `copy_config_to_registered_logger` method to do this.
610610

611+
???+ tip
612+
To help differentiate between loggers, we include the standard logger `name` attribute for all loggers we copied configuration to.
613+
611614
By default all registered loggers will be modified. You can change this behavior by providing `include` and `exclude` attributes. You can also provide optional `log_level` attribute external loggers will be configured with.
612615

613616
```python hl_lines="10" title="Cloning Logger config to all other registered standard loggers"

tests/functional/test_logger_utils.py

+23
Original file line numberDiff line numberDiff line change
@@ -265,3 +265,26 @@ def test_copy_config_to_ext_loggers_no_duplicate_logs(stdout, logger, log_level)
265265
logs = capture_multiple_logging_statements_output(stdout)
266266
assert {"message": msg} not in logs
267267
assert sum(msg in log.values() for log in logs) == 1
268+
269+
270+
def test_logger_name_is_included_during_copy(stdout, logger, log_level):
271+
# GIVEN two external loggers and powertools logger initialized
272+
logger_1: logging.Logger = logger()
273+
logger_2: logging.Logger = logger()
274+
msg = "test message1"
275+
276+
powertools_logger = Logger(service=service_name(), level=log_level.INFO.value, stream=stdout)
277+
278+
# WHEN configuration copied from powertools logger to ALL external loggers
279+
# AND external loggers used
280+
utils.copy_config_to_registered_loggers(source_logger=powertools_logger, include={logger_1.name, logger_2.name})
281+
logger_1.info(msg)
282+
logger_2.info(msg)
283+
powertools_logger.info(msg)
284+
285+
logger1_log, logger2_log, pt_log = capture_multiple_logging_statements_output(stdout)
286+
287+
# THEN name attribute should be present in all loggers
288+
assert logger1_log["name"] == logger_1.name
289+
assert logger2_log["name"] == logger_2.name
290+
assert pt_log["name"] == powertools_logger.name

0 commit comments

Comments
 (0)