File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -270,11 +270,12 @@ def exception(*args, **kwargs) -> None:
270270 """
271271 Logs an error message and includes the active stack trace.
272272 """
273+ raw_error = kwargs .get ("error" )
273274 entry = _entry_from_args (LogSeverity .ERROR , * args , ** kwargs )
274275 exc_type , exc_value , exc_traceback = _sys .exc_info ()
275276 if exc_type is not None and exc_value is not None and exc_traceback is not None :
276- error = entry . get ( "error" )
277- if not isinstance ( error , dict ) or "stack_trace" not in error :
277+ uses_active_error_traceback = raw_error is exc_value or raw_error is exc_type
278+ if not uses_active_error_traceback :
278279 entry ["stack_trace" ] = "" .join (
279280 _traceback .format_exception (exc_type , exc_value , exc_traceback )
280281 )
Original file line number Diff line number Diff line change @@ -266,6 +266,23 @@ def test_exception_should_not_duplicate_stack_trace_for_exception_type_error(
266266 assert "stack_trace" in log_output ["error" ]
267267 assert "TypeError: boom" in log_output ["error" ]["stack_trace" ]
268268
269+ def test_exception_should_include_active_stack_trace_for_error_dict (
270+ self , capsys : pytest .CaptureFixture [str ]
271+ ):
272+ try :
273+ raise ValueError ("boom" )
274+ except ValueError :
275+ logger .exception ("failed" , error = {"stack_trace" : "custom traceback" })
276+
277+ raw_log_output = capsys .readouterr ().err
278+ log_output = json .loads (raw_log_output )
279+
280+ assert log_output ["severity" ] == "ERROR"
281+ assert log_output ["message" ] == "failed"
282+ assert log_output ["error" ] == {"stack_trace" : "custom traceback" }
283+ assert "stack_trace" in log_output
284+ assert "ValueError: boom" in log_output ["stack_trace" ]
285+
269286 def test_remove_circular_references (self , capsys : pytest .CaptureFixture [str ]):
270287 # Create an object with a circular reference.
271288 circ = {"b" : "foo" }
You can’t perform that action at this time.
0 commit comments