@@ -1205,6 +1205,52 @@ def test_log_level(self) -> None:
1205
1205
self .assertEqual (expected_level , logging .getLogger ().level )
1206
1206
1207
1207
1208
+ class TestLambdaLoggerHandlerSetup (unittest .TestCase ):
1209
+ @classmethod
1210
+ def tearDownClass (cls ):
1211
+ importlib .reload (bootstrap )
1212
+ logging .getLogger ().handlers .clear ()
1213
+ logging .getLogger ().level = logging .NOTSET
1214
+
1215
+ def test_handler_setup (self , * _ ):
1216
+ test_cases = [
1217
+ (62 , 0xA55A0003 , 46 , {}),
1218
+ (133 , 0xa55a001a , 117 , {"AWS_LAMBDA_LOG_FORMAT" : "JSON" }),
1219
+ (62 , 0xa55a001b , 46 , {"AWS_LAMBDA_LOG_LEVEL" : "INFO" }),
1220
+ ]
1221
+
1222
+ for total_length , header , message_length , env_vars in test_cases :
1223
+ with patch .dict (os .environ , env_vars , clear = True ), NamedTemporaryFile () as temp_file :
1224
+ importlib .reload (bootstrap )
1225
+ logging .getLogger ().handlers .clear ()
1226
+ logging .getLogger ().level = logging .NOTSET
1227
+
1228
+ before = int (time .time_ns () / 1000 )
1229
+ with bootstrap .FramedTelemetryLogSink (
1230
+ os .open (temp_file .name , os .O_CREAT | os .O_RDWR )
1231
+ ) as ls :
1232
+ bootstrap ._setup_logging (bootstrap ._AWS_LAMBDA_LOG_FORMAT , bootstrap ._AWS_LAMBDA_LOG_LEVEL , ls )
1233
+ logger = logging .getLogger ()
1234
+ logger .critical ("critical" )
1235
+ after = int (time .time_ns () / 1000 )
1236
+
1237
+ content = open (temp_file .name , "rb" ).read ()
1238
+ self .assertEqual (len (content ), total_length )
1239
+
1240
+ pos = 0
1241
+ frame_type = int .from_bytes (content [pos : pos + 4 ], "big" )
1242
+ self .assertEqual (frame_type , header )
1243
+ pos += 4
1244
+
1245
+ length = int .from_bytes (content [pos : pos + 4 ], "big" )
1246
+ self .assertEqual (length , message_length )
1247
+ pos += 4
1248
+
1249
+ timestamp = int .from_bytes (content [pos : pos + 8 ], "big" )
1250
+ self .assertTrue (before <= timestamp )
1251
+ self .assertTrue (timestamp <= after )
1252
+
1253
+
1208
1254
class TestLogging (unittest .TestCase ):
1209
1255
@classmethod
1210
1256
def setUpClass (cls ) -> None :
0 commit comments