123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- %%% A gen_server to check if we get any error_logger messages during test to see if
- %%% any messages gets generated when they shouldn't
- -module(error_logger_mon).
- -behaviour(gen_server).
- -define(SERVER, ?MODULE).
- -record(state, {events = [] :: [logger:log_event()]}).
- %% ------------------------------------------------------------------
- %% API Function Exports
- %% ------------------------------------------------------------------
- -export([
- start_link/0,
- report/1,
- get_msg_count/0,
- get_msgs/0,
- reset/0,
- stop/0,
- install_handler/0,
- install_handler/1,
- uninstall_handler/0
- ]).
- %% OTP logger
- -export([log/2]).
- %% gen_server
- -export([
- init/1,
- handle_call/3,
- handle_cast/2,
- handle_info/2,
- terminate/2,
- code_change/3
- ]).
- %% Logger handler
- log(Event, _) ->
- error_logger_mon:report(Event),
- ok.
- %% ------------------------------------------------------------------
- %% API Function Definitions
- %% ------------------------------------------------------------------
- start_link() ->
- gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
- report(Event) ->
- gen_server:call(?SERVER, {report, Event}).
- get_msg_count() ->
- gen_server:call(?SERVER, get_count).
- get_msgs() ->
- gen_server:call(?SERVER, get_events).
- reset() ->
- gen_server:call(?SERVER, reset).
- stop() ->
- gen_server:call(?SERVER, stop).
- install_handler() ->
- install_handler(error_logger).
- install_handler(FilterName) ->
- logger:add_handler(
- ?MODULE,
- ?MODULE,
- #{
- level => all,
- filter_default => stop,
- filters => [{FilterName, filter(FilterName)}]
- }
- ).
- filter(error_logger) ->
- {fun error_logger_filter/2, []};
- filter(pooler) ->
- {fun logger_filters:domain/2, {log, sub, [pooler]}}.
- uninstall_handler() ->
- logger:remove_handler(?MODULE).
- error_logger_filter(#{meta := #{error_logger := #{tag := _}}} = E, _) ->
- E;
- error_logger_filter(_, _) ->
- ignore.
- %% ------------------------------------------------------------------
- %% gen_server Function Definitions
- %% ------------------------------------------------------------------
- init([]) ->
- {ok, #state{}}.
- handle_call(get_count, _From, #state{events = E} = State) ->
- {reply, length(E), State};
- handle_call(get_events, _From, #state{events = E} = State) ->
- {reply, E, State};
- handle_call({report, Event}, _From, #state{events = E} = State) ->
- {reply, ok, State#state{events = [Event | E]}};
- handle_call(reset, _From, State) ->
- {reply, ok, State#state{events = []}};
- handle_call(stop, _From, State) ->
- {stop, normal, ok, State};
- handle_call(_Request, _From, State) ->
- {reply, error, State}.
- handle_cast(_Msg, State) ->
- {noreply, State}.
- handle_info(_Info, State) ->
- {noreply, State}.
- terminate(_Reason, _State) ->
- ok.
- code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
|