@@ -28,8 +28,10 @@ defmodule Logger.App do
2828
2929 case Supervisor . start_link ( children , strategy: :rest_for_one , name: Logger.Supervisor ) do
3030 { :ok , sup } ->
31- handlers = [ error_logger_tty_h: otp_reports? , sasl_report_tty_h: sasl_reports? ]
32- delete_handlers ( handlers )
31+ if otp_reports? or sasl_reports? do
32+ delete_handlers ( otp_reports? , sasl_reports? )
33+ end
34+
3335 { :ok , sup , config }
3436
3537 { :error , _ } = error ->
@@ -45,9 +47,7 @@ defmodule Logger.App do
4547
4648 @ doc false
4749 def stop ( config ) do
48- Logger.Config . deleted_handlers ( )
49- |> add_handlers ( )
50-
50+ add_handlers ( Logger.Config . deleted_handlers ( ) )
5151 Logger.Config . delete ( config )
5252 end
5353
@@ -73,17 +73,33 @@ defmodule Logger.App do
7373 end
7474 end
7575
76- defp delete_handlers ( handlers ) do
77- to_delete =
78- for { handler , delete? } <- handlers ,
79- delete? && :error_logger . delete_report_handler ( handler ) != { :error , :module_not_found } ,
80- do: handler
76+ defp delete_handlers ( otp_reports? , sasl_reports? ) do
77+ deleted =
78+ if is_pid ( Process . whereis ( :logger ) ) and Code . ensure_loaded? ( :logger ) do
79+ with { :ok , { module , config } } <- :logger . get_handler_config ( :logger_std_h ) ,
80+ :ok <- :logger . remove_handler ( :logger_std_h ) do
81+ [ { :logger_std_h , module , config } ]
82+ else
83+ _ -> [ ]
84+ end
85+ else
86+ for { tty , true } <- [ error_logger_tty_h: otp_reports? , sasl_report_tty_h: sasl_reports? ] ,
87+ :error_logger . delete_report_handler ( tty ) != { :error , :module_not_found } ,
88+ do: tty
89+ end
8190
82- [ ] = Logger.Config . deleted_handlers ( to_delete )
91+ [ ] = Logger.Config . deleted_handlers ( deleted )
8392 :ok
8493 end
8594
8695 defp add_handlers ( handlers ) do
87- Enum . each ( handlers , & :error_logger . add_report_handler / 1 )
96+ for handler <- handlers do
97+ case handler do
98+ { handler , module , config } -> :logger . add_handler ( handler , module , config )
99+ handler -> :error_logger . add_report_handler ( handler )
100+ end
101+ end
102+
103+ :ok
88104 end
89105end
0 commit comments