23
23
24
24
-behaviour (gen_server ).
25
25
26
+ -include (" lager.hrl" ).
27
+
26
28
-ifdef (TEST ).
27
29
-include_lib (" eunit/include/eunit.hrl" ).
28
30
-endif .
@@ -73,6 +75,8 @@ handle_info({gen_event_EXIT, Module, Reason}, #state{module=Module,
73
75
handle_info (reinstall_handler , # state {module = Module , config = Config , event = Event } = State ) ->
74
76
install_handler (Event , Module , Config ),
75
77
{noreply , State };
78
+ handle_info (stop , State ) ->
79
+ {stop , normal , State };
76
80
handle_info (_Info , State ) ->
77
81
{noreply , State }.
78
82
@@ -87,12 +91,18 @@ code_change(_OldVsn, State, _Extra) ->
87
91
install_handler (Event , Module , Config ) ->
88
92
case gen_event :add_sup_handler (Event , Module , Config ) of
89
93
ok ->
90
- _ = lager : log (debug , self () , " Lager installed handler ~p into ~p " , [Module , Event ]),
94
+ ? INT_LOG (debug , " Lager installed handler ~p into ~p " , [Module , Event ]),
91
95
lager :update_loglevel_config (),
92
96
ok ;
97
+ {error , {fatal , Reason }} ->
98
+ ? INT_LOG (error , " Lager fatally failed to install handler ~p into"
99
+ " ~p , NOT retrying: ~p " , [Module , Event , Reason ]),
100
+ % % tell ourselves to stop
101
+ self () ! stop ,
102
+ ok ;
93
103
Error ->
94
104
% % try to reinstall it later
95
- _ = lager : log (error , self () , " Lager failed to install handler ~p into"
105
+ ? INT_LOG (error , " Lager failed to install handler ~p into"
96
106
" ~p , retrying later : ~p " , [Module , Event , Error ]),
97
107
erlang :send_after (5000 , self (), reinstall_handler ),
98
108
ok
@@ -145,10 +155,10 @@ reinstall_on_runtime_failure_test_() ->
145
155
? assert (lists :member (lager_crash_backend , gen_event :which_handlers (lager_event ))),
146
156
timer :sleep (6000 ),
147
157
? assertEqual (2 , lager_test_backend :count ()),
148
- {_Level , _Time , Message , _Metadata } = lager_test_backend :pop (),
149
- ? assertEqual (" Lager event handler lager_crash_backend exited with reason crash" , lists :flatten (Message )),
150
- {_Level2 , _Time2 , Message2 , _Metadata } = lager_test_backend :pop (),
151
- ? assertMatch (" Lager failed to install handler lager_crash_backend into lager_event, retrying later :" ++ _ , lists :flatten (Message2 )),
158
+ {_Severity , _Date , Msg , _Metadata } = lager_test_backend :pop (),
159
+ ? assertEqual (" Lager event handler lager_crash_backend exited with reason crash" , lists :flatten (Msg )),
160
+ {_Severity2 , _Date2 , Msg2 , _Metadata2 } = lager_test_backend :pop (),
161
+ ? assertMatch (" Lager failed to install handler lager_crash_backend into lager_event, retrying later :" ++ _ , lists :flatten (Msg2 )),
152
162
? assertEqual (false , lists :member (lager_crash_backend , gen_event :which_handlers (lager_event )))
153
163
after
154
164
application :stop (lager ),
0 commit comments