Skip to content

Commit 6032094

Browse files
sabiwarajosevalim
authored andcommitted
Always respect options passed to capture_log (#12721)
1 parent 871e737 commit 6032094

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

lib/ex_unit/lib/ex_unit/capture_server.ex

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ defmodule ExUnit.CaptureServer do
7171
refs = Map.put(config.log_captures, ref, true)
7272

7373
{level, opts} = Keyword.pop(opts, :level)
74-
true = :ets.insert(@ets, {ref, string_io, level || :all})
74+
{formatter_mod, formatter_config} = Logger.default_formatter(opts)
75+
true = :ets.insert(@ets, {ref, string_io, level || :all, formatter_mod, formatter_config})
7576

7677
if map_size(refs) == 1 do
77-
formatter = Logger.default_formatter(opts)
78-
:ok = :logger.add_handler(@name, __MODULE__, %{formatter: formatter})
78+
:ok = :logger.add_handler(@name, __MODULE__, %{})
7979

8080
status =
8181
with {:ok, config} <- :logger.get_handler_config(:default),
@@ -226,12 +226,10 @@ defmodule ExUnit.CaptureServer do
226226

227227
## :logger handler callback.
228228

229-
def log(event, %{} = config) do
230-
%{formatter: {formatter_mod, formatter_config}} = config
231-
chardata = formatter_mod.format(event, formatter_config)
232-
233-
for [string_io, level] <- :ets.match(@ets, {:_, :"$1", :"$2"}),
229+
def log(event, _config) do
230+
for {_ref, string_io, level, formatter_mod, formatter_config} <- :ets.tab2list(@ets),
234231
:logger.compare_levels(event.level, level) in [:gt, :eq] do
232+
chardata = formatter_mod.format(event, formatter_config)
235233
# There is a race condition where the capture_log is removed
236234
# but another process is attempting to log to string io device
237235
# that no longer exists, so we wrap it in try/catch.
@@ -241,5 +239,7 @@ defmodule ExUnit.CaptureServer do
241239
_ -> :ok
242240
end
243241
end
242+
243+
:ok
244244
end
245245
end

lib/ex_unit/test/ex_unit/capture_log_test.exs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,19 @@ defmodule ExUnit.CaptureLogTest do
114114

115115
assert log == "id=123 | hello"
116116
end
117+
118+
@tag capture_log: true
119+
test "respect options with capture_log: true" do
120+
options = [format: "$metadata| $message", metadata: [:id], colors: [enabled: false]]
121+
122+
assert {4, log} =
123+
with_log(options, fn ->
124+
Logger.info("hello", id: 123)
125+
2 + 2
126+
end)
127+
128+
assert log == "id=123 | hello"
129+
end
117130
end
118131

119132
defp wait_capture_removal() do

0 commit comments

Comments
 (0)