]> granicus.if.org Git - ejabberd/commitdiff
Report errors in logger initialization
authorEvgeny Khramtsov <ekhramtsov@process-one.net>
Wed, 23 Oct 2019 13:03:48 +0000 (16:03 +0300)
committerEvgeny Khramtsov <ekhramtsov@process-one.net>
Wed, 23 Oct 2019 13:03:48 +0000 (16:03 +0300)
src/ejabberd_logger.erl

index d90ff88df15fa702787bbe0e85b712b2fbcc98a0..0102681078aad0e0067aee4a3281ff3641beb68a 100644 (file)
@@ -110,19 +110,32 @@ start(Level) ->
                  single_line => false},
     FileFmtConfig = FmtConfig#{template => file_template()},
     ConsoleFmtConfig = FmtConfig#{template => console_template()},
-    logger:set_primary_config(level, Level),
-    logger:add_primary_filter(progress_report,
-                             {fun ?MODULE:progress_filter/2, stop}),
-    logger:update_formatter_config(default, ConsoleFmtConfig),
-    logger:add_handler(ejabberd_log, logger_std_h,
-                      #{level => all,
-                        config => Config#{file => EjabberdLog},
-                        formatter => {logger_formatter, FileFmtConfig}}),
-    logger:add_handler(error_log, logger_std_h,
-                      #{level => error,
-                        config => Config#{file => ErrorLog},
-                        formatter => {logger_formatter, FileFmtConfig}}),
-    ok.
+    try
+       ok = logger:set_primary_config(level, Level),
+       ok = logger:update_formatter_config(default, ConsoleFmtConfig),
+       case logger:add_primary_filter(progress_report,
+                                      {fun ?MODULE:progress_filter/2, stop}) of
+           ok -> ok;
+           {error, {already_exist, _}} -> ok
+       end,
+       case logger:add_handler(ejabberd_log, logger_std_h,
+                               #{level => all,
+                                 config => Config#{file => EjabberdLog},
+                                 formatter => {logger_formatter, FileFmtConfig}}) of
+           ok -> ok;
+           {error, {already_exist, _}} -> ok
+       end,
+       case logger:add_handler(error_log, logger_std_h,
+                               #{level => error,
+                                 config => Config#{file => ErrorLog},
+                                 formatter => {logger_formatter, FileFmtConfig}}) of
+           ok -> ok;
+           {error, {already_exist, _}} -> ok
+       end
+    catch _:{Tag, Err} when Tag == badmatch; Tag == case_clause ->
+           ?LOG_CRITICAL("Failed to set logging: ~p", [Err]),
+           Err
+    end.
 
 restart() ->
     ok.