Skip to content

Commit b96fc39

Browse files
hairyhumjosevalim
authored andcommitted
Restrict Logger.configure on config_change callback (#10388)
The `config_change` callback is called from `application_controller` process, which is receiving env updates on releases. `Logger.configure` does a blocking call to the `Logger` process, which calls `Application.put_env` This causes a crash on logger config update. The fix is to call `Logger.configure` only for the config that have not yet been persisted.
1 parent e1cb898 commit b96fc39

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

lib/logger/lib/logger/app.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ defmodule Logger.App do
6262

6363
@doc false
6464
def config_change(changed, _new, _removed) do
65-
Logger.configure(changed)
65+
# All other config has already been persisted, we only need to
66+
# update the level and reload the logger state.
67+
Logger.configure(Keyword.take(changed, [:level]))
6668
end
6769

6870
@doc """

lib/logger/test/logger_test.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,8 @@ defmodule LoggerTest do
647647
:ok = Logger.configure(level: :debug)
648648

649649
try do
650-
assert Logger.App.config_change([level: :error], [], []) === :ok
650+
assert Application.put_env(:logger, :level, :error) === :ok
651+
assert :application_controller.config_change(logger: [level: :debug]) === :ok
651652
assert Logger.level() === :error
652653
after
653654
Logger.configure(level: :debug)

0 commit comments

Comments
 (0)