@@ -108,7 +108,7 @@ defmodule LoggerJSON.Formatters.Datadog do
108108 % { syslog: syslog ( level , meta , hostname ) }
109109 |> maybe_put ( :logger , format_logger ( meta ) )
110110 |> maybe_merge ( format_http_request ( meta ) )
111- |> maybe_merge ( format_error ( message , level , reported_levels ) )
111+ |> maybe_merge ( format_error ( message , metadata , level , reported_levels ) )
112112 |> maybe_merge ( encode ( metadata , redactors ) )
113113 |> maybe_merge ( encode ( message , redactors ) )
114114 |> @ encoder . encode_to_iodata! ( encoder_opts )
@@ -259,27 +259,28 @@ defmodule LoggerJSON.Formatters.Datadog do
259259
260260 defp format_http_request ( _meta ) , do: nil
261261
262- defp format_error ( % { message: message } = msg , level , reported_levels ) when is_binary ( message ) do
263- if level in reported_levels do
264- existing_error = msg [ :error ] || % { }
262+ defp format_error ( % { message: message } = msg , metadata , level , reported_levels ) when is_binary ( message ) do
263+ existing_error = msg [ :error ]
265264
265+ if level in reported_levels and is_nil ( existing_error ) do
266266 error =
267- existing_error
268- |> Map . put ( :kind , get_error_kind ( msg ) )
267+ metadata [ :error ]
268+ |> Kernel . || ( % { } )
269+ |> Map . put ( :kind , get_error_kind ( metadata ) )
269270 |> Map . put ( :message , message )
270- |> maybe_put ( :stack , get_error_stack ( msg ) )
271+ |> maybe_put ( :stack , get_error_stack ( metadata ) )
271272
272273 % { error: error }
273274 end
274275 end
275276
276- defp format_error ( _msg , _level , _reported_levels ) , do: nil
277+ defp format_error ( _msg , _metadata , _level , _reported_levels ) , do: nil
277278
278279 defp get_error_kind ( % { error: % { kind: kind } } ) when is_binary ( kind ) , do: kind
279- defp get_error_kind ( _ ) , do: "error"
280+ defp get_error_kind ( _metadata ) , do: "error"
280281
281282 defp get_error_stack ( % { error: % { stack: stack } } ) when is_binary ( stack ) , do: stack
282- defp get_error_stack ( _msg ) , do: nil
283+ defp get_error_stack ( _metadata ) , do: nil
283284
284285 if Code . ensure_loaded? ( Plug.Conn ) do
285286 defp build_http_request_data ( % Plug.Conn { } = conn , request_id ) do
0 commit comments