Skip to content

Commit 0b30f64

Browse files
fishcakezJosé Valim
authored and
José Valim
committed
Handle changes to crash reports in OTP 20 (#6185)
* :message_queue_len and :current_stacktrace added * :messages and :dictionary not always present Signed-off-by: José Valim <[email protected]>
1 parent f126e9f commit 0b30f64

File tree

2 files changed

+41
-21
lines changed

2 files changed

+41
-21
lines changed

lib/logger/lib/logger/translator.ex

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,17 @@ defmodule Logger.Translator do
257257
defp crash_info(min_level,
258258
[{:ancestors, ancestors} | debug], prefix) do
259259
[prefix, "Ancestors: ", inspect(ancestors) |
260-
crash_debug(min_level, debug, prefix)]
260+
crash_info(min_level, debug, prefix)]
261+
end
262+
263+
defp crash_info(:debug, debug, prefix) do
264+
for {key, value} <- debug do
265+
crash_debug(key, value, prefix)
266+
end
267+
end
268+
269+
defp crash_info(_, _, _) do
270+
[]
261271
end
262272

263273
defp crash_call(mod, fun, arity) when is_integer(arity) do
@@ -268,22 +278,28 @@ defmodule Logger.Translator do
268278
format_mfa(mod, fun, length(args))
269279
end
270280

271-
defp crash_debug(:debug,
272-
[messages: msgs, links: links, dictionary: dict,
273-
trap_exit: trap, status: status, heap_size: heap_size,
274-
stack_size: stack_size, reductions: reductions], prefix) do
275-
[prefix, "Messages: ", inspect(msgs),
276-
prefix, "Links: ", inspect(links),
277-
prefix, "Dictionary: ", inspect(dict),
278-
prefix, "Trapping Exits: ", inspect(trap),
279-
prefix, "Status: ", inspect(status),
280-
prefix, "Heap Size: ", inspect(heap_size),
281-
prefix, "Stack Size: ", inspect(stack_size),
282-
prefix, "Reductions: ", inspect(reductions)]
281+
defp crash_debug(:current_stacktrace, stack, prefix) do
282+
stack_prefix = [prefix | " "]
283+
[prefix, "Current Stacktrace:" |
284+
Enum.map(stack, &[stack_prefix | Exception.format_stacktrace_entry(&1)])]
283285
end
284286

285-
defp crash_debug(_min_level, _info, _prefix) do
286-
[]
287+
defp crash_debug(key, value, prefix) do
288+
[prefix, crash_debug_key(key), ?:, ?\s, inspect(value)]
289+
end
290+
291+
defp crash_debug_key(key) do
292+
case key do
293+
:message_queue_len -> "Message Queue Length"
294+
:messages -> "Messages"
295+
:links -> "Links"
296+
:dictionary -> "Dictionary"
297+
:trap_exit -> "Trapping Exits"
298+
:status -> "Status"
299+
:heap_size -> "Heap Size"
300+
:stack_size -> "Stack Size"
301+
:reductions -> "Reductions"
302+
end
287303
end
288304

289305
defp crash_linked(_min_level, []), do: []

lib/logger/test/logger/translator_test.exs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,8 @@ defmodule Logger.TranslatorTest do
472472
send(pid, :go)
473473
receive do: ({:DOWN, ^ref, _, _, _} -> :ok)
474474
end) =~ ~r"""
475-
Ancestors: \[#PID<\d+\.\d+\.\d+>\]
475+
Ancestors: \[#PID<\d+\.\d+\.\d+>\](?:
476+
Message Queue Length: 1(?#TODO: Require once depend on 20)|)
476477
Messages: \[:message\]
477478
Links: \[\]
478479
Dictionary: \[\]
@@ -493,15 +494,18 @@ defmodule Logger.TranslatorTest do
493494
send(pid, :go)
494495
receive do: ({:DOWN, ^ref, _, _, _} -> :ok)
495496
end) =~ ~r"""
496-
Ancestors: \[#PID<\d+\.\d+\.\d+>, #PID<\d+\.\d+\.\d+>\]
497-
Messages: \[\]
498-
Links: \[#PID<\d+\.\d+\.\d+>\]
499-
Dictionary: \[\]
497+
Ancestors: \[#PID<\d+\.\d+\.\d+>, #PID<\d+\.\d+\.\d+>\](?:
498+
Message Queue Length: 0|
499+
Messages: \[\](?# TODO: Remove once depend on 20))
500+
Links: \[#PID<\d+\.\d+\.\d+>\](?:|
501+
Dictionary: \[\](?# TODO: Remove once depend on 20))
500502
Trapping Exits: false
501503
Status: :waiting
502504
Heap Size: \d+
503505
Stack Size: \d+
504-
Reductions: \d+
506+
Reductions: \d+(?:
507+
Current Stacktrace:
508+
test/logger/translator_test.exs:\d+: Logger.TranslatorTest.sleep/1(?#TODO: Require once depend on 20)|)
505509
"""
506510
end
507511

0 commit comments

Comments
 (0)