Skip to content

Commit 1feef9c

Browse files
mitchellhenkejosevalim
authored andcommitted
include callers in translated Logger metadata for Task (#10111)
1 parent 5c5fa57 commit 1feef9c

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

lib/elixir/lib/task/supervised.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ defmodule Task.Supervised do
112112
%{
113113
domain: [:otp, :elixir],
114114
error_logger: %{tag: :error_msg},
115-
report_cb: &__MODULE__.format_report/1
115+
report_cb: &__MODULE__.format_report/1,
116+
callers: Process.get(:"$callers")
116117
}
117118
)
118119

lib/logger/test/logger/translator_test.exs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ defmodule Logger.TranslatorTest do
306306

307307
test "translates Task crashes" do
308308
{:ok, pid} = Task.start_link(__MODULE__, :task, [self()])
309+
parent = self()
309310

310311
assert capture_log(fn ->
311312
ref = Process.monitor(pid)
@@ -324,6 +325,7 @@ defmodule Logger.TranslatorTest do
324325

325326
assert {%RuntimeError{message: "oops"}, [_ | _]} = task_metadata[:crash_reason]
326327
assert {%RuntimeError{message: "oops"}, [_ | _]} = process_metadata[:crash_reason]
328+
assert [parent] == task_metadata[:callers]
327329

328330
refute Keyword.has_key?(task_metadata, :initial_call)
329331
assert process_metadata[:initial_call] == {Logger.TranslatorTest, :task, 1}
@@ -332,6 +334,7 @@ defmodule Logger.TranslatorTest do
332334
test "translates Task async_stream crashes with neighbour" do
333335
fun = fn -> Task.async_stream([:oops], :erlang, :error, []) |> Enum.to_list() end
334336
{:ok, pid} = Task.start(__MODULE__, :task, [self(), fun])
337+
parent = self()
335338

336339
assert capture_log(:debug, fn ->
337340
ref = Process.monitor(pid)
@@ -345,12 +348,15 @@ defmodule Logger.TranslatorTest do
345348

346349
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
347350
assert_receive {:error, _pid, {Logger, ["Process " | _], _ts, process_metadata}}
351+
assert [pid, parent] == task_metadata[:callers]
348352

349353
assert {:oops, [_ | _]} = task_metadata[:crash_reason]
350354
assert {%ErlangError{original: :oops}, [_ | _]} = process_metadata[:crash_reason]
351355
end
352356

353357
test "translates Task undef module crash" do
358+
parent = self()
359+
354360
assert capture_log(fn ->
355361
{:ok, pid} = Task.start(:module_does_not_exist, :undef, [])
356362
ref = Process.monitor(pid)
@@ -365,12 +371,15 @@ defmodule Logger.TranslatorTest do
365371

366372
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
367373
assert_receive {:error, _pid, {Logger, ["Process " | _], _ts, process_metadata}}
374+
assert [parent] == task_metadata[:callers]
368375

369376
assert {%UndefinedFunctionError{function: :undef}, [_ | _]} = task_metadata[:crash_reason]
370377
assert {%UndefinedFunctionError{function: :undef}, [_ | _]} = process_metadata[:crash_reason]
371378
end
372379

373380
test "translates Task undef function crash" do
381+
parent = self()
382+
374383
assert capture_log(fn ->
375384
{:ok, pid} = Task.start(__MODULE__, :undef, [])
376385
ref = Process.monitor(pid)
@@ -385,12 +394,15 @@ defmodule Logger.TranslatorTest do
385394

386395
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
387396
assert_receive {:error, _pid, {Logger, ["Process " | _], _ts, process_metadata}}
397+
assert [parent] == task_metadata[:callers]
388398

389399
assert {%UndefinedFunctionError{function: :undef}, [_ | _]} = task_metadata[:crash_reason]
390400
assert {%UndefinedFunctionError{function: :undef}, [_ | _]} = process_metadata[:crash_reason]
391401
end
392402

393403
test "translates Task raising ErlangError" do
404+
parent = self()
405+
394406
assert capture_log(fn ->
395407
exception =
396408
try do
@@ -413,12 +425,15 @@ defmodule Logger.TranslatorTest do
413425

414426
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
415427
assert_receive {:error, _pid, {Logger, ["Process " | _], _ts, process_metadata}}
428+
assert [parent] == task_metadata[:callers]
416429

417430
assert {%ErlangError{original: :foo}, [_ | _]} = task_metadata[:crash_reason]
418431
assert {%ErlangError{original: :foo}, [_ | _]} = process_metadata[:crash_reason]
419432
end
420433

421434
test "translates Task raising Erlang badarg error" do
435+
parent = self()
436+
422437
assert capture_log(fn ->
423438
{:ok, pid} = Task.start(:erlang, :error, [:badarg])
424439
ref = Process.monitor(pid)
@@ -433,12 +448,15 @@ defmodule Logger.TranslatorTest do
433448

434449
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
435450
assert_receive {:error, _pid, {Logger, ["Process " | _], _ts, process_metadata}}
451+
assert [parent] == task_metadata[:callers]
436452

437453
assert {%ArgumentError{message: "argument error"}, [_ | _]} = task_metadata[:crash_reason]
438454
assert {%ArgumentError{message: "argument error"}, [_ | _]} = process_metadata[:crash_reason]
439455
end
440456

441457
test "translates Task exiting abnormally" do
458+
parent = self()
459+
442460
assert capture_log(fn ->
443461
{:ok, pid} = Task.start(:erlang, :exit, [:abnormal])
444462
ref = Process.monitor(pid)
@@ -453,6 +471,7 @@ defmodule Logger.TranslatorTest do
453471

454472
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
455473
assert_receive {:error, _pid, {Logger, ["Process " | _], _ts, process_metadata}}
474+
assert [parent] == task_metadata[:callers]
456475

457476
assert {:abnormal, [_ | _]} = task_metadata[:crash_reason]
458477
assert {:abnormal, [_ | _]} = process_metadata[:crash_reason]
@@ -625,8 +644,9 @@ defmodule Logger.TranslatorTest do
625644
"""
626645
end
627646

628-
test "translates :proc_lib crashes on debug" do
647+
test "translates :proc_lib+Task crashes on debug" do
629648
{:ok, pid} = Task.start_link(__MODULE__, :task, [self()])
649+
parent = self()
630650

631651
assert capture_log(:debug, fn ->
632652
ref = Process.monitor(pid)
@@ -652,13 +672,15 @@ defmodule Logger.TranslatorTest do
652672
assert process_metadata[:pid] == task_metadata[:pid]
653673
assert is_list(process_metadata[:callers])
654674
assert is_list(process_metadata[:ancestors])
675+
assert [parent] == task_metadata[:callers]
655676

656677
assert {%RuntimeError{message: "oops"}, [_ | _]} = task_metadata[:crash_reason]
657678
assert {%RuntimeError{message: "oops"}, [_ | _]} = process_metadata[:crash_reason]
658679
end
659680

660-
test "translates :proc_lib crashes with neighbour on debug" do
681+
test "translates :proc_lib+Task crashes with neighbour on debug" do
661682
{:ok, pid} = Task.start_link(__MODULE__, :sub_task, [self()])
683+
parent = self()
662684

663685
assert capture_log(:debug, fn ->
664686
ref = Process.monitor(pid)
@@ -677,6 +699,9 @@ defmodule Logger.TranslatorTest do
677699
Current Stacktrace:
678700
(lib/logger/)?test/logger/translator_test.exs:\d+: Logger.TranslatorTest.sleep/1
679701
"""
702+
703+
assert_receive {:error, _pid, {Logger, ["Task " <> _ | _], _ts, task_metadata}}
704+
assert [parent] == task_metadata[:callers]
680705
end
681706

682707
test "translates Supervisor progress" do

0 commit comments

Comments
 (0)