@@ -273,3 +273,51 @@ def test_logger_buffer_log_output_for_levels_above_minimum(log_level, stdout, se
273
273
log = capture_multiple_logging_statements_output (stdout )
274
274
assert len (log ) == 1
275
275
assert log [0 ]["message" ] == msg
276
+
277
+
278
+ def test_logger_buffer_flush_on_uncaught_exception (stdout , service_name , monkeypatch , lambda_context ):
279
+ monkeypatch .setenv (constants .XRAY_TRACE_ID_ENV , "1234" )
280
+
281
+ # GIVEN: A logger configured with a large buffer and error-based flushing
282
+ logger_buffer_config = LoggerBufferConfig (max_size = 10240 , minimum_log_level = "DEBUG" , flush_on_error = True )
283
+ logger = Logger (level = "DEBUG" , service = service_name , stream = stdout , logger_buffer = logger_buffer_config )
284
+
285
+ @logger .inject_lambda_context (flush_buffer_on_uncaught_error = True )
286
+ def handler (event , context ):
287
+ # Log messages that should be flushed when an exception occurs
288
+ logger .debug ("this log line will be flushed after error - 1" )
289
+ logger .debug ("this log line will be flushed after error - 2" )
290
+ raise ValueError ("Test error" )
291
+
292
+ # WHEN Invoking the handler and expecting a ValueError
293
+ with pytest .raises (ValueError ):
294
+ handler ({}, lambda_context )
295
+
296
+ # THEN Verify that buffered log messages are flushed before the exception
297
+ log = capture_multiple_logging_statements_output (stdout )
298
+ assert len (log ) == 2 , "Expected two log messages to be flushed"
299
+ assert log [0 ]["message" ] == "this log line will be flushed after error - 1"
300
+ assert log [1 ]["message" ] == "this log line will be flushed after error - 2"
301
+
302
+
303
+ def test_logger_buffer_not_flush_on_uncaught_exception (stdout , service_name , monkeypatch , lambda_context ):
304
+ monkeypatch .setenv (constants .XRAY_TRACE_ID_ENV , "1234" )
305
+
306
+ # GIVEN: A logger configured with a large buffer and error-based flushing
307
+ logger_buffer_config = LoggerBufferConfig (max_size = 10240 , minimum_log_level = "DEBUG" , flush_on_error = True )
308
+ logger = Logger (level = "DEBUG" , service = service_name , stream = stdout , logger_buffer = logger_buffer_config )
309
+
310
+ @logger .inject_lambda_context (flush_buffer_on_uncaught_error = False )
311
+ def handler (event , context ):
312
+ # Log messages that should be flushed when an exception occurs
313
+ logger .debug ("this log line will be flushed after error - 1" )
314
+ logger .debug ("this log line will be flushed after error - 2" )
315
+ raise ValueError ("Test error" )
316
+
317
+ # WHEN Invoking the handler and expecting a ValueError
318
+ with pytest .raises (ValueError ):
319
+ handler ({}, lambda_context )
320
+
321
+ # THEN Verify that buffered log messages are flushed before the exception
322
+ log = capture_multiple_logging_statements_output (stdout )
323
+ assert len (log ) == 0
0 commit comments