At the risk of terrible necroposting and of stating the obvious: I ran into this same problem and saw that the OP’s last remarks went unanswered. I found a solution, so maybe other googlers are helped by this:
Our test.exs had
config :logger,
level: :warn
and only by setting it to :info I could get my capture_log assertions to capture the relevant logs.
However, it totally polluted the test output. As described, setting the log level to :warn actually removes the :debug and :info level log statements from the compiled code entirely.
Fortunately, there’s a way around this:
# capture all logs...
config :logger,
level: :debug
# ... but show only warnings and up on the console
config :logger, :console,
level: :warn
This works because Logger’s default backend, console
, can be separately configured to filter log levels. That way the Logger.info calls etc are not removed from the code, but the console output is still sane.
I found it all to be documented pretty well in the Logger docs btw: https://hexdocs.pm/logger/Logger.html