Skip to content

Commit 7303e58

Browse files
committed
Handle :function metadata properly, closes #12703
1 parent 1459d23 commit 7303e58

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

lib/logger/lib/logger/formatter.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ defmodule Logger.Formatter do
203203

204204
def format(_event, _config) do
205205
raise "invalid configuration for Logger.Formatter. " <>
206-
"Use Logger.Formatter.init/1 to define a formatter"
206+
"Use Logger.Formatter.new/1 to define a formatter"
207207
end
208208

209209
defp compute_meta(:module, %{mfa: {mod, _, _}}), do: mod
@@ -498,8 +498,6 @@ defmodule Logger.Formatter do
498498
rest
499499
end
500500

501-
defp metadata(:file, file) when is_list(file), do: file
502-
503501
defp metadata(:domain, [head | tail]) when is_atom(head) do
504502
Enum.map_intersperse([head | tail], ?., &Atom.to_string/1)
505503
end
@@ -514,6 +512,8 @@ defmodule Logger.Formatter do
514512
Exception.format_mfa(mod, fun, arity)
515513
end
516514

515+
defp metadata(:function, function) when is_list(function), do: function
516+
defp metadata(:file, file) when is_list(file), do: file
517517
defp metadata(_, list) when is_list(list), do: nil
518518

519519
defp metadata(_, other) do

lib/logger/test/logger/formatter_test.exs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,28 @@ defmodule Logger.FormatterTest do
5454
assert format_time(time) == ["12", ?:, "30", ?:, "10", ?., [?0, "10"]]
5555
end
5656

57+
describe "log" do
58+
test "handles :module and :function" do
59+
{_, formatter} =
60+
new(
61+
format: "\n$time $metadata[$level] $message\n",
62+
metadata: [:module, :function, :mfa],
63+
colors: [enabled: false]
64+
)
65+
66+
assert %{
67+
level: :warn,
68+
msg: {:string, "foo"},
69+
meta: %{
70+
mfa: {Logger.Formatter, :compile, 1}
71+
}
72+
}
73+
|> format(formatter)
74+
|> IO.chardata_to_string() =~
75+
"module=Logger.Formatter function=compile/1 mfa=Logger.Formatter.compile/1"
76+
end
77+
end
78+
5779
describe "compile + format" do
5880
defmodule CompileMod do
5981
def format(_level, _msg, _ts, _md) do
@@ -66,7 +88,7 @@ defmodule Logger.FormatterTest do
6688
["\n", :time, " ", :metadata, "[", :level, "] ", :message, "\n"]
6789
end
6890

69-
test "compile with str" do
91+
test "compile with string" do
7092
assert compile("$level $time $date $metadata $message $node") ==
7193
Enum.intersperse([:level, :time, :date, :metadata, :message, :node], " ")
7294

0 commit comments

Comments
 (0)