diff --git a/lib/logger/lib/logger.ex b/lib/logger/lib/logger.ex index d4758ed4e3f..96d61f31d7a 100644 --- a/lib/logger/lib/logger.ex +++ b/lib/logger/lib/logger.ex @@ -738,9 +738,15 @@ defmodule Logger do def configure(options) do for {k, v} <- options do cond do - k == :level -> :logger.set_primary_config(:level, elixir_level_to_erlang_level(v)) - k in @valid_options -> Application.put_env(:logger, k, v) - true -> :ok + k == :level -> + :ok = :logger.set_primary_config(:level, elixir_level_to_erlang_level(v)) + Application.put_env(:logger, :level, v) + + k in @valid_options -> + Application.put_env(:logger, k, v) + + true -> + :ok end end diff --git a/lib/logger/test/logger_test.exs b/lib/logger/test/logger_test.exs index 3f42c05e39b..9a21475a6fb 100644 --- a/lib/logger/test/logger_test.exs +++ b/lib/logger/test/logger_test.exs @@ -650,6 +650,30 @@ defmodule LoggerTest do Logger.configure(translator_inspect_opts: []) end + test "configure/1 persists :level to the application environment across restarts" do + previous = Application.get_env(:logger, :level) + + try do + Application.delete_env(:logger, :level) + Logger.configure(level: :error) + assert Logger.level() == :error + assert Application.get_env(:logger, :level) == :error + + Logger.App.stop() + Application.start(:logger) + assert Logger.level() == :error + assert Application.get_env(:logger, :level) == :error + after + Logger.configure(level: previous || :debug) + + if previous do + Application.put_env(:logger, :level, previous) + else + Application.delete_env(:logger, :level) + end + end + end + @tag formatter: [metadata: [:module, :meta]] test "always evaluate messages" do Logger.configure(