Skip to content

Commit f30eed0

Browse files
Flushing logs when log line is bigger than buffer size
1 parent f9db4cd commit f30eed0

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

aws_lambda_powertools/logging/logger.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,9 @@ def decorate(event, context, *args, **kwargs):
536536
# Re-raise any exceptions that occur during handler execution
537537
raise
538538
finally:
539-
self._buffer_cache.clear()
539+
# Clear the cache after invocation is complete
540+
if self._buffer_config:
541+
self._buffer_cache.clear()
540542

541543
return decorate
542544

@@ -1117,7 +1119,7 @@ def _add_log_record_to_buffer(
11171119
# Determine tracer ID, defaulting to first invoke marker
11181120
tracer_id = get_tracer_id()
11191121

1120-
if tracer_id:
1122+
if tracer_id and self._buffer_config:
11211123
log_record: dict[str, Any] = _create_buffer_record(
11221124
level=level,
11231125
msg=msg,
@@ -1130,7 +1132,7 @@ def _add_log_record_to_buffer(
11301132
self._buffer_cache.add(tracer_id, log_record)
11311133
except BufferError:
11321134
warnings.warn(
1133-
message=f"Cannot add item to the buffer. "
1135+
message="Cannot add item to the buffer. "
11341136
f"Item size exceeds total cache size {self._buffer_config.max_size} bytes",
11351137
category=PowertoolsUserWarning,
11361138
stacklevel=2,
@@ -1182,6 +1184,19 @@ def flush_buffer(self) -> None:
11821184
# Clear the entire cache
11831185
self._buffer_cache.clear()
11841186

1187+
def clear_buffer(self) -> None:
1188+
"""
1189+
Clear the internal buffer cache.
1190+
1191+
This method removes all items from the buffer cache, effectively resetting it to an empty state.
1192+
1193+
Returns
1194+
-------
1195+
None
1196+
"""
1197+
if self._buffer_config:
1198+
self._buffer_cache.clear()
1199+
11851200

11861201
def set_package_logger(
11871202
level: str | int = logging.DEBUG,

tests/functional/logger/required_dependencies/test_powertools_logger_buffer.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,23 @@ def test_ensure_log_location_after_flush_buffer(stdout, service_name, monkeypatc
190190
assert "test_ensure_log_location_after_flush_buffer" in log[0]["location"]
191191

192192

193+
def test_clear_buffer_during_execution(stdout, service_name, monkeypatch):
194+
monkeypatch.setenv(constants.XRAY_TRACE_ID_ENV, "1-67c39786-5908a82a246fb67f3089263f")
195+
196+
# GIVEN A logger configured with a sufficiently large buffer
197+
logger_buffer_config = LoggerBufferConfig(max_size=10240)
198+
logger = Logger(level="DEBUG", service=service_name, stream=stdout, logger_buffer=logger_buffer_config)
199+
200+
# WHEN we clear the buffer during the execution
201+
logger.debug("this log line will be flushed")
202+
logger.clear_buffer()
203+
204+
# THEN not log is flushed
205+
logger.flush_buffer()
206+
log = capture_multiple_logging_statements_output(stdout)
207+
assert not log
208+
209+
193210
def test_exception_logging_during_buffer_flush(stdout, service_name, monkeypatch):
194211
monkeypatch.setenv(constants.XRAY_TRACE_ID_ENV, "1-67c39786-5908a82a246fb67f3089263f")
195212

0 commit comments

Comments
 (0)