@@ -21,49 +21,59 @@ defmodule Logger.App do
2121 { otp_reports? , sasl_reports? , threshold } , :link ] ,
2222 [ id: Logger.ErrorHandler , function: :watcher ] ) ]
2323
24+ config = Logger.Config . new ( )
25+
2426 case Supervisor . start_link ( children , options ) do
25- { :ok , _ } = ok ->
26- deleted = delete_error_logger_handler ( otp_reports? , :error_logger_tty_h , [ ] )
27- deleted = delete_error_logger_handler ( sasl_reports? , :sasl_report_tty_h , deleted )
28- store_deleted_handlers ( deleted )
29- ok
27+ { :ok , sup } ->
28+ handlers = [ error_logger_tty_h: otp_reports? ,
29+ sasl_logger_tty_h: sasl_reports? ]
30+ delete_handlers ( handlers )
31+ { :ok , sup , config }
3032 { :error , _ } = error ->
33+ Logger.Config . delete ( config )
3134 error
3235 end
3336 end
3437
3538 @ doc false
36- def stop ( _ ) do
37- Application . get_env ( :logger , :deleted_handlers )
38- |> Enum . each ( & :error_logger . add_report_handler / 1 )
39-
40- # We need to do this in another process as the Application
41- # Controller is currently blocked shutting down this app.
42- spawn_link ( fn -> Logger.Config . clear_data end )
39+ def stop ( config ) do
40+ Logger.Config . deleted_handlers ( )
41+ |> add_handlers ( )
42+ Logger.Config . delete ( config )
43+ end
4344
44- :ok
45+ @ doc false
46+ def config_change ( _changed , _new , _removed ) do
47+ Logger.Config . configure ( [ ] )
4548 end
4649
4750 @ doc """
4851 Stops the application without sending messages to error logger.
4952 """
5053 def stop ( ) do
51- set = Application . get_env ( :logger , :deleted_handlers )
52- Application . put_env ( :logger , :deleted_handlers , HashSet . new )
53- _ = Application . stop ( :logger )
54- Enum . each ( set , & :error_logger . add_report_handler / 1 )
54+ try do
55+ Logger.Config . deleted_handlers ( [ ] )
56+ catch
57+ :exit , { :noproc , _ } ->
58+ { :error , { :not_started , :logger } }
59+ else
60+ deleted_handlers ->
61+ result = Application . stop ( :logger )
62+ add_handlers ( deleted_handlers )
63+ result
64+ end
5565 end
5666
57- defp store_deleted_handlers ( list ) do
58- Application . put_env ( :logger , :deleted_handlers , Enum . into ( list , HashSet . new ) )
67+ defp delete_handlers ( handlers ) do
68+ deleted? = fn ( { handler , delete? } ) ->
69+ delete? && :error_logger . delete_report_handler ( handler ) != { :error , :module_not_found }
70+ end
71+ [ ] = Enum . filter_map ( handlers , deleted? , fn ( { handler , _ } ) -> handler end )
72+ |> Logger.Config . deleted_handlers ( )
73+ :ok
5974 end
6075
61- defp delete_error_logger_handler ( should_delete? , handler , deleted ) do
62- if should_delete? and
63- :error_logger . delete_report_handler ( handler ) != { :error , :module_not_found } do
64- [ handler | deleted ]
65- else
66- deleted
67- end
76+ defp add_handlers ( handlers ) do
77+ Enum . each ( handlers , & :error_logger . add_report_handler / 1 )
6878 end
6979end
0 commit comments