Configure console log level using the new LoggerBackends


My team has recently switched to Elixir 1.15, but we are facing issues with hiding logs in tests.

Previously, we used to pass the capture_log: true option to ExUnit.start in the test_helper.exs:

ExUnit.start(capture_log: true)

That way we avoid having the console flooded with logs when running our test suite (which contains hundreds of tests), but they are still displayed when a test fails. Since Elixir 1.15 though, we started having some logs leaking despite that option. We noticed that they came from the on_exit handlers, that run in a different process than the main test process.

Following a suggestion from José Valim, I am trying to disable logging for the console instead:

# Configure the general log level. This way logs are produced, captured,
# and displayed whenever a test fails
Logger.configure(level: :debug)

# Configure the console log level to none, so that logs are not displayed while
# running tests
Logger.configure_backend(:console, level: :none)

That works fine, but according to the doc of configure_backend/2: This function is deprecated. Use LoggerBackends.configure/2 from :logger_backends dependency.

But I am struggling to use this new dependency. I could find very little information about it and no example of repository that uses it. I tried to follow what I could understand from the documentation. I tried calling LoggerBackends.configure(LoggerBackends.Console, level: :none) but I get:

** (exit) exited in:, LoggerBackends.Console, {:configure, [level: :none]})
    ** (EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started
    (stdlib 5.1) gen_event.erl:469: :gen_event.call1/3
    test/test_helper.exs:1: (file)

Am I missing something? Would anyone have more information about how to use LoggerBackends?

1 Like