@@ -108,7 +108,7 @@ defmodule LoggerJSON.Formatters.Datadog do
108
108
% { syslog: syslog ( level , meta , hostname ) }
109
109
|> maybe_put ( :logger , format_logger ( meta ) )
110
110
|> 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 ) )
112
112
|> maybe_merge ( encode ( metadata , redactors ) )
113
113
|> maybe_merge ( encode ( message , redactors ) )
114
114
|> @ encoder . encode_to_iodata! ( encoder_opts )
@@ -259,27 +259,28 @@ defmodule LoggerJSON.Formatters.Datadog do
259
259
260
260
defp format_http_request ( _meta ) , do: nil
261
261
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 ]
265
264
265
+ if level in reported_levels and is_nil ( existing_error ) do
266
266
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 ) )
269
270
|> Map . put ( :message , message )
270
- |> maybe_put ( :stack , get_error_stack ( msg ) )
271
+ |> maybe_put ( :stack , get_error_stack ( metadata ) )
271
272
272
273
% { error: error }
273
274
end
274
275
end
275
276
276
- defp format_error ( _msg , _level , _reported_levels ) , do: nil
277
+ defp format_error ( _msg , _metadata , _level , _reported_levels ) , do: nil
277
278
278
279
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"
280
281
281
282
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
283
284
284
285
if Code . ensure_loaded? ( Plug.Conn ) do
285
286
defp build_http_request_data ( % Plug.Conn { } = conn , request_id ) do
0 commit comments