diff --git a/awslambdaric/bootstrap.py b/awslambdaric/bootstrap.py index 2f36177..9554b39 100644 --- a/awslambdaric/bootstrap.py +++ b/awslambdaric/bootstrap.py @@ -108,7 +108,7 @@ def log_error(error_result, log_sink): "timestamp": time.strftime( _DATETIME_FORMAT, logging.Formatter.converter(time.time()) ), - "log_level": "ERROR", + "level": "ERROR", **error_result, } log_sink.log_error( diff --git a/tests/test_bootstrap.py b/tests/test_bootstrap.py index 92a2416..4a6c54f 100644 --- a/tests/test_bootstrap.py +++ b/tests/test_bootstrap.py @@ -1146,6 +1146,28 @@ def test_log_error_invokeId_line_framed_log_sink(self): actual_message = content[16:].decode() self.assertEqual(actual_message, expected_logged_error) + @patch("sys.stdout", new_callable=StringIO) + def test_log_error_json_log_sink_uses_level_key(self, mock_stdout): + with patch.dict(os.environ, {"AWS_LAMBDA_LOG_FORMAT": "JSON"}, clear=True): + importlib.reload(bootstrap) + self.addCleanup(self._reload_default_bootstrap) + + err_to_log = bootstrap.make_error( + "Error message", "ErrorType", ["line1", "line2"] + ) + bootstrap.log_error(err_to_log, bootstrap.StandardLogSink()) + + logged = json.loads(mock_stdout.getvalue()) + self.assertEqual(logged["level"], "ERROR") + self.assertNotIn("log_level", logged) + self.assertEqual(logged["errorType"], "ErrorType") + self.assertEqual(logged["errorMessage"], "Error message") + + @staticmethod + def _reload_default_bootstrap(): + with patch.dict(os.environ, {}, clear=True): + importlib.reload(bootstrap) + class TestUnbuffered(unittest.TestCase): def test_write(self):