@@ -28,8 +28,10 @@ defmodule Logger.App do
28
28
29
29
case Supervisor . start_link ( children , strategy: :rest_for_one , name: Logger.Supervisor ) do
30
30
{ :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
+
33
35
{ :ok , sup , config }
34
36
35
37
{ :error , _ } = error ->
@@ -45,9 +47,7 @@ defmodule Logger.App do
45
47
46
48
@ doc false
47
49
def stop ( config ) do
48
- Logger.Config . deleted_handlers ( )
49
- |> add_handlers ( )
50
-
50
+ add_handlers ( Logger.Config . deleted_handlers ( ) )
51
51
Logger.Config . delete ( config )
52
52
end
53
53
@@ -73,17 +73,33 @@ defmodule Logger.App do
73
73
end
74
74
end
75
75
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
81
90
82
- [ ] = Logger.Config . deleted_handlers ( to_delete )
91
+ [ ] = Logger.Config . deleted_handlers ( deleted )
83
92
:ok
84
93
end
85
94
86
95
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
88
104
end
89
105
end
0 commit comments