Skip to content

Commit a58a4eb

Browse files
committed
Merge pull request #3337 from MSch/logger-prints-pids
Support printing pids in Logger metadata.
2 parents 3bb0499 + 6246d00 commit a58a4eb

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/logger/lib/logger/formatter.ex

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ defmodule Logger.Formatter do
104104
defp output(:metadata, _, _, _, []), do: ""
105105
defp output(:metadata, _, _, _, meta) do
106106
Enum.map(meta, fn {key, val} ->
107-
[to_string(key), ?=, to_string(val), ?\s]
107+
[to_string(key), ?=, metadata(val), ?\s]
108108
end)
109109
end
110110

@@ -118,4 +118,13 @@ defmodule Logger.Formatter do
118118
defp levelpad(:info), do: " "
119119
defp levelpad(:warn), do: " "
120120
defp levelpad(:error), do: ""
121+
122+
defp metadata(pid) when is_pid(pid) do
123+
:erlang.pid_to_list(pid)
124+
end
125+
defp metadata(pid) when is_reference(pid) do
126+
'#Ref' ++ rest = :erlang.ref_to_list(pid)
127+
rest
128+
end
129+
defp metadata(other), do: to_string(other)
121130
end

lib/logger/test/logger/formatter_test.exs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ defmodule Logger.FormatterTest do
4343
compiled = compile("$metadata")
4444
assert IO.chardata_to_string(format(compiled, :error, nil, nil, [meta: :data])) ==
4545
"meta=data "
46+
assert IO.chardata_to_string(format(compiled, :error, nil, nil,
47+
[meta: :data, pid: :erlang.list_to_pid('<0.123.4>')])) == "meta=data pid=<0.123.4> "
48+
49+
# Hack to get the same predictable reference for every test run.
50+
ref = <<131, 114, 0, 3, 100, 0, 13, 110, 111, 110, 111, 100, 101, 64, 110, 111, 104, 111, 115, 116, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0>> |> :erlang.binary_to_term
51+
assert "#Reference<0.0.0.80>" == inspect(ref) # ensure the deserialization worked correctly
52+
assert IO.chardata_to_string(format(compiled, :error, nil, nil,
53+
[meta: :data, ref: ref])) == "meta=data ref=<0.0.0.80> "
54+
4655
assert IO.chardata_to_string(format(compiled, :error, nil, nil, [])) ==
4756
""
4857

0 commit comments

Comments
 (0)