Skip to content

Commit d6b9038

Browse files
committed
change flush buffer warning
1 parent 0b1e80b commit d6b9038

File tree

2 files changed

+36
-22
lines changed

2 files changed

+36
-22
lines changed

aws_lambda_powertools/logging/logger.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ def __init__(
242242
buffer_config: LoggerBufferConfig | None = None,
243243
**kwargs,
244244
) -> None:
245+
self._buffer_config = buffer_config
246+
self._buffer_cache = LoggerBufferCache(max_size_bytes=self._buffer_config.max_bytes) if buffer_config else None
245247

246248
# Used in case of sampling
247249
self.initial_log_level = self._determine_log_level(level)
@@ -1057,7 +1059,7 @@ def _determine_log_level(self, level: str | int | None) -> str | int:
10571059
warnings.warn(
10581060
"Advanced Logging Controls (ALC) Log Level is less verbose than Log Buffering Log Level. "
10591061
"Buffered logs will be filtered by ALC",
1060-
UserWarning,
1062+
PowertoolsUserWarning,
10611063
stacklevel=2,
10621064
)
10631065

@@ -1196,6 +1198,23 @@ def flush_buffer(self) -> None:
11961198
"""
11971199
tracer_id = get_tracer_id()
11981200

1201+
# Check ALC level against buffer level
1202+
lambda_log_level = self._get_aws_lambda_log_level()
1203+
if lambda_log_level:
1204+
# Check if buffer level is less verbose than ALC
1205+
if (
1206+
hasattr(self, "_buffer_config")
1207+
and self._buffer_config
1208+
and logging.getLevelName(lambda_log_level)
1209+
> logging.getLevelName(self._buffer_config.buffer_at_verbosity)
1210+
):
1211+
warnings.warn(
1212+
"Advanced Logging Controls (ALC) Log Level is less verbose than Log Buffering Log Level. "
1213+
"Some logs might be missing",
1214+
PowertoolsUserWarning,
1215+
stacklevel=2,
1216+
)
1217+
11991218
# Flushing log without a tracer id? Return
12001219
if not tracer_id:
12011220
return
@@ -1205,20 +1224,6 @@ def flush_buffer(self) -> None:
12051224
if not buffer:
12061225
return
12071226

1208-
# Check ALC level before flushing
1209-
alc_level = self._get_aws_lambda_log_level()
1210-
if (
1211-
alc_level is not None
1212-
and self._buffer_config
1213-
and logging.getLevelName(alc_level) > logging.getLevelName(self._buffer_config.buffer_at_verbosity)
1214-
):
1215-
warnings.warn(
1216-
message="Advanced Logging Controls (ALC) Log Level is less verbose than Log Buffering Log Level."
1217-
"Some logs might be missing.",
1218-
category=UserWarning,
1219-
stacklevel=2,
1220-
)
1221-
12221227
# Process log records
12231228
for log_line in buffer:
12241229
self._create_and_flush_log_record(log_line)

tests/functional/logger/required_dependencies/test_powertools_logger_buffer.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -527,15 +527,22 @@ def handler(event, context):
527527
assert not logger._buffer_cache.get("1-67c39786-5908a82a246fb67f3089263f")
528528

529529

530-
def test_warning_when_alc_less_verbose_than_buffer(monkeypatch):
530+
def test_warning_when_alc_less_verbose_than_buffer(stdout, monkeypatch):
531531
# GIVEN Lambda ALC set to INFO
532532
monkeypatch.setenv("AWS_LAMBDA_LOG_LEVEL", "INFO")
533533

534-
# WHEN creating a logger with DEBUG buffer level AND logging a debug message
534+
# WHEN creating a logger with DEBUG buffer level
535535
# THEN a warning should be emitted
536-
with pytest.warns(UserWarning, match="Advanced Logging Controls .* Buffered logs will be filtered by ALC"):
536+
with pytest.warns(PowertoolsUserWarning, match="Advanced Logging Controls*"):
537537
logger = Logger(service="test", level="DEBUG", buffer_config=LoggerBufferConfig(buffer_at_verbosity="DEBUG"))
538-
logger.debug("This is a debug")
538+
539+
# AND logging a debug message
540+
logger.debug("This is a debug")
541+
542+
# AND flushing buffer
543+
# THEN another warning should be emitted about ALC and buffer level mismatch
544+
with pytest.warns(PowertoolsUserWarning, match="Advanced Logging Controls*"):
545+
logger.flush_buffer()
539546

540547

541548
def test_warning_on_buffer_flush_when_alc_less_verbose(monkeypatch):
@@ -551,6 +558,8 @@ def test_warning_on_buffer_flush_when_alc_less_verbose(monkeypatch):
551558
logger.flush_buffer()
552559

553560
# THEN appropriate warnings should be emitted
554-
assert len(warning_info) == 2
555-
assert "Buffered logs will be filtered by ALC" in str(warning_info[0].message)
556-
assert "Some logs might be missing" in str(warning_info[1].message)
561+
assert any("Some logs might be missing" in str(w.message) for w in warning_info)
562+
assert any(
563+
"Current log level (DEBUG) does not match AWS Lambda Advanced Logging Controls" in str(w.message)
564+
for w in warning_info
565+
)

0 commit comments

Comments
 (0)