tompave
Hello,
I’m adding support for Elixir 1.11 to a package I maintain and I’m having some issues with the logger configuration. This might be related to this forum thread or issue 6016 on the Elixir GitHub repo.
Until Elixir 1.10, I’ve been able to set the log level in config/test.exs with:
config :logger, level: :error
Now, with Elixir 1.11 this seems to not have any effect and my test output is full of debug lines, e.g. from Ecto.
That line still works in dev (e.g. if I set it in config/config.exs and then run iex -S mix). I’ve also tried with both the old use Mix.Config and the new import Config, with the same results. (For the avoidance of doubt: yes, the test config file is being imported.)
I find it interesting that by the time test/test_helper.exs is executed, I can verify that this configuration has been set:
Logger.level() # :debug
:logger.get_primary_config()[:level] # :debug
Application.get_env(:logger, :level) # :error
Which makes me think that something is preventing Elixir from configuring the Erlang logger in the tests. In dev, the integration works normally and those values appear to be in sync.
The only way I’ve found to make it work is to configure the logger directly in config/test.exs:
- config :logger, level: :error
+ Logger.configure(level: :error)
This feels wrong though, and I can’t help but wonder if there is something obvious that I’ve missed, and an easier way to solve the problem. This kind of change in behaviour between 1.10 and 1.11 seems the kind of thing that someone else must have stumbled upon before.
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #blog-post
- #phoenix_html
- #iex
- #graphql
- #ai
- #genstage
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex











Showing Posts 1 to 7- Show Best Posts
- Show All Posts (oldest first)
- Show All Posts (newest first)
NobbZ
Do you start your application for the tests and has it declared its dependency on
:loggercorrectly by adding it to:extra_applications?Please try to add
Application.ensure_all_started(:logger)intest/test_helper.exsbefore checking the config.tompave
Hi @NobbZ, thank you for the pointers. I’ll answer your questions and then add more details.
No and yes.
I have a test matrix (1) and some of the test configurations are run with
mix test --no-start (...)(2) because in some cases I need granular control over how the applications are started.To compensate for that, I start my application manually in
test_helper.exs, withApplication.ensure_all_started(:fun_with_flags)(3).Yes. (4)
I’ve done so just in case, but it had no effect. The
:loggerapplication was already started anyway (see below), and the the log-level of theLoggeris still ignoring what I’m setting in my config files.More details on what I can see by the time
test/test_helper.exsis loaded, which is the same with or without the suggestion from above:tompave
I’ve verified that the problem is the
--no-startflag tomix test. If I run the tests without it, the logger is configured correctly to the:errorseverity level.Apparently
Application.ensure_all_started(:fun_with_flags)alone is not enough to compensate for the--no-startflag.mrz
Hey,
I was having the same issue in my project. I rely on
mix test --no-startbecause of my dependency on local-cluster; in my case, I got the previous quiet output in my tests by configuring the Logger module at runtime intest_helpers.exs, adding aLogger.configure([level: :warning])call.tompave
Thanks for confirming that
Logger.configure(level: :warning)works.That worked for me too, but in the end I changed my test setup to not rely on
--no-start. (Actually, it turns out that since I adopted that flag something else has changed and now it’s not required anymore. I need to investigate that more.)It still seems odd that this would change between Elixir 1.10 and 1.11.
jswny
I’m having a similar issue where I have the log level configured in
config/test.exs(which is imported properly) and the above are the same. The app env is getting set but it’s not getting to the Erlang logger, even though I haveApplication.ensure_all_started(:logger)in mytest_helper.exs.It must be the
--no-startissue but I’m not sure how to fix it properly because onlyLogger.configure(level: :warning)worksBrainiac
For future reference for devs having this issue with
--no-start:This issue occurs when running
mix test --no-startand causes the application tree to not start.The usual advice when runnning with
--no-startis to useApplication.ensure_all_started/2to start the application tree under yourtest_helper.exs, however this is not ideal as the:loggerapplication would have been started prior to calling this, resulting in yourconfig.exsnot being respected.This can be seen in the following code in the
mix app.starttask, whichmix testdelegates application starting to. In the linked snippet,the Logger application is actually killed when the application is started on the test run.As such, it would be necessary to use the
app.starttask directly instead of usingApplication.ensure_all_started/2so that the:loggermodule works correctly and as expected.Hence, your
test_helper.exsshould be updated to: