Fl4m3Ph03n1x
How to remove logs from `mix test`
Background
I have a considerable test suite for my app with unit tests and integrated tests. The application has a considerable size so it has quite a number of Logger.debug, Logger.info and Logger.error calls spread around everywhere.
Objective
This means that when I run mix test my output gets polluted with hundreds of lines of logs. I need these logs so removing them from production code is not really an option, but I would like to hide them when testing.
Problem
To achieve this I changed my test_helper.exs to have the following content:
ExUnit.start(capture_log: true)
However when I run mix test I see a ton of l debug and even info logs.
Questions
How can I hide all logs from showing when running mix test ?
Marked As Solved
jola
config :logger, backends: [] will disable logging. You can find all the options here https://hexdocs.pm/logger/Logger.html
Also Liked
sasajuric
When testing for errors, you can use ExUnit.CaptureLog to capture log messages (which then won’t appear in the output).
In general, I wouldn’t advise muting errors in tests, since they might be indicative of why some tests are failing.
hackvan
You can use only in the test that triggers Log output the @moduletag directive:
@moduletag :capture_log
test "Test that trigger log output..." do
...
end
jola
The test config (config/test.exs) generated by mix phx.new has this.
# Print only warnings and errors during test
config :logger, level: :warn
rodrigues
for other kinds of outputs, capture_io/1 might help cleanup test output: https://hexdocs.pm/ex_unit/ExUnit.CaptureIO.html







