Skip to content

Commit bbce69b

Browse files
author
José Valim
committed
Allow logger to use ansi_color from metadata
Signed-off-by: José Valim <jose.valim@plataformatec.com.br>
1 parent 56779fc commit bbce69b

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

lib/logger/lib/logger/backends/console.ex

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ defmodule Logger.Backends.Console do
8686
colors = configure_colors(config)
8787
max_buffer = Keyword.get(config, :max_buffer, 32)
8888
%{state | format: format, metadata: Enum.reverse(metadata),
89-
level: level, colors: colors, device: device, max_buffer: max_buffer}
89+
level: level, colors: colors, device: device, max_buffer: max_buffer}
9090
end
9191

9292
defp configure_merge(env, options) do
@@ -149,7 +149,7 @@ defmodule Logger.Backends.Console do
149149
%{format: format, metadata: keys, colors: colors} = state
150150
format
151151
|> Logger.Formatter.format(level, msg, ts, take_metadata(md, keys))
152-
|> color_event(level, colors)
152+
|> color_event(level, colors, md)
153153
end
154154

155155
defp take_metadata(metadata, keys) do
@@ -161,10 +161,11 @@ defmodule Logger.Backends.Console do
161161
end
162162
end
163163

164-
defp color_event(data, _level, %{enabled: false}), do: data
164+
defp color_event(data, _level, %{enabled: false}, _md), do: data
165165

166-
defp color_event(data, level, %{enabled: true} = colors) do
167-
[IO.ANSI.format_fragment(Map.fetch!(colors, level), true), data | IO.ANSI.reset]
166+
defp color_event(data, level, %{enabled: true} = colors, md) do
167+
color = md[:ansi_color] || Map.fetch!(colors, level)
168+
[IO.ANSI.format_fragment(color, true), data | IO.ANSI.reset]
168169
end
169170

170171
defp log_buffer(%{buffer_size: 0, buffer: []} = state), do: state

lib/logger/test/logger/backends/console_test.exs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,4 +109,12 @@ defmodule Logger.Backends.ConsoleTest do
109109
Logger.error("hello")
110110
end) == IO.ANSI.cyan() <> "hello" <> IO.ANSI.reset()
111111
end
112+
113+
test "can use colors from metadata" do
114+
Logger.configure_backend(:console, [format: "$message", colors: [enabled: true, error: :cyan]])
115+
116+
assert capture_log(fn ->
117+
Logger.log(:error, "hello", ansi_color: :yellow)
118+
end) == IO.ANSI.yellow() <> "hello" <> IO.ANSI.reset()
119+
end
112120
end

0 commit comments

Comments
 (0)