13
13
from .lambda_context import LambdaContext
14
14
from .lambda_runtime_client import LambdaRuntimeClient
15
15
from .lambda_runtime_exception import FaultException
16
- from .lambda_runtime_log_utils import INVOCATION_LOGGING_CONTEXT , JsonFormatter
16
+ from .lambda_runtime_log_utils import (
17
+ INVOCATION_LOGGING_CONTEXT ,
18
+ JsonFormatter ,
19
+ DATETIME_FORMAT ,
20
+ )
17
21
from .lambda_runtime_marshaller import to_json
18
22
19
23
ERROR_LOG_LINE_TERMINATE = "\r "
20
24
ERROR_LOG_IDENT = "\u00a0 " # NO-BREAK SPACE U+00A0
25
+ RUNTIME_ERROR_LOGGER_NAME = "system"
21
26
22
27
23
28
def _get_handler (handler ):
@@ -74,8 +79,15 @@ def result(*args):
74
79
return result
75
80
76
81
77
- def make_error (error_message , error_type , stack_trace , invoke_id = None ):
82
+ def make_error (
83
+ error_message , error_type , stack_trace , invoke_id = None , level = logging .ERROR
84
+ ):
78
85
result = {
86
+ "timestamp" : time .strftime (
87
+ DATETIME_FORMAT , logging .Formatter .converter (time .time ())
88
+ ),
89
+ "level" : level ,
90
+ "logger" : RUNTIME_ERROR_LOGGER_NAME ,
79
91
"errorMessage" : error_message if error_message else "" ,
80
92
"errorType" : error_type if error_type else "" ,
81
93
"requestId" : invoke_id if invoke_id is not None else "" ,
@@ -94,6 +106,19 @@ def replace_line_indentation(line, indent_char, new_indent_char):
94
106
95
107
96
108
def log_error (error_result , log_sink ):
109
+ if AWS_LAMBDA_LOG_FORMAT == "JSON" :
110
+ log_error_json (error_result , log_sink )
111
+ else :
112
+ log_error_text (error_result , log_sink )
113
+
114
+
115
+ def log_error_json (error_result , log_sink ):
116
+ log_sink .log_error (
117
+ [to_json (error_result )], log_level = error_result .get ("level" , logging .ERROR )
118
+ )
119
+
120
+
121
+ def log_error_text (error_result , log_sink ):
97
122
error_description = "[ERROR]"
98
123
99
124
error_result_type = error_result .get ("errorType" )
@@ -120,7 +145,9 @@ def log_error(error_result, log_sink):
120
145
replace_line_indentation (trace_line , " " , ERROR_LOG_IDENT )
121
146
]
122
147
123
- log_sink .log_error (error_message_lines )
148
+ log_sink .log_error (
149
+ error_message_lines , log_level = error_result .get ("level" , logging .ERROR )
150
+ )
124
151
125
152
126
153
def handle_event_request (
@@ -153,7 +180,9 @@ def handle_event_request(
153
180
)
154
181
except FaultException as e :
155
182
xray_fault = make_xray_fault ("LambdaValidationError" , e .msg , os .getcwd (), [])
156
- error_result = make_error (e .msg , e .exception_type , e .trace , invoke_id )
183
+ error_result = make_error (
184
+ e .msg , e .exception_type , e .trace , invoke_id , level = logging .FATAL
185
+ )
157
186
158
187
except Exception :
159
188
etype , value , tb = sys .exc_info ()
@@ -222,7 +251,10 @@ def build_fault_result(exc_info, msg):
222
251
break
223
252
224
253
return make_error (
225
- msg if msg else str (value ), etype .__name__ , traceback .format_list (tb_tuples )
254
+ msg if msg else str (value ),
255
+ etype .__name__ ,
256
+ traceback .format_list (tb_tuples ),
257
+ level = logging .FATAL ,
226
258
)
227
259
228
260
@@ -304,10 +336,10 @@ def __enter__(self):
304
336
def __exit__ (self , exc_type , exc_value , exc_tb ):
305
337
pass
306
338
307
- def log (self , msg , log_level = None , log_format = None ):
339
+ def log (self , msg , log_level = logging . NOTSET , log_format = "TEXT" ):
308
340
sys .stdout .write (msg )
309
341
310
- def log_error (self , message_lines ):
342
+ def log_error (self , message_lines , log_level = logging . ERROR ):
311
343
error_message = ERROR_LOG_LINE_TERMINATE .join (message_lines ) + "\n "
312
344
sys .stdout .write (error_message )
313
345
@@ -377,9 +409,9 @@ def log(self, msg, log_level=logging.NOTSET, log_format="TEXT"):
377
409
)
378
410
self .file .write (log_msg )
379
411
380
- def log_error (self , message_lines ):
412
+ def log_error (self , message_lines , log_level = logging . ERROR ):
381
413
error_message = "\n " .join (message_lines )
382
- self .log (error_message , log_level = logging . FATAL )
414
+ self .log (error_message , log_level = log_level )
383
415
384
416
385
417
def update_xray_env_variable (xray_trace_id ):
0 commit comments