r10829: keep trying re-adding logger after a disconnection.
[irc-logger.git] / logger.lisp
index b242f5a9f806480cc3e06a1e3f67aa8083ea3c31..cb1a2430633082e774b653f3d57065bbdd8b87fa 100644 (file)
 
 (defun add-private-log-entry (logger fmt &rest args)
   (apply #'add-log-entry
-        (if (get-private-log-stream logger) 
+        (if (and logger (get-private-log-stream logger))
             (get-private-log-stream logger) 
-            *standard-output*)
+           *standard-output*)
         fmt args))
 
 (defun privmsg-hook (msg)
            *recon-channel-names* (channel-names logger))
       (ignore-errors (remove-logger logger)))
     
-    (let ((new-logger
-          (ignore-errors
-           (add-logger *recon-nick* *recon-server*
-                       :channels *recon-channel-names*
-                       :output *recon-user-output*
-                       :password *recon-password*
-                       :realname *recon-realname*
-                       :username *recon-username*
-                       :logging-stream *recon-logging-stream*
-                       :private-log *recon-private-log*
-                       :unknown-log *recon-unknown-log*
-                       :async *recon-async*
-                       :formats *recon-formats*))))
-      (when new-logger
-       (sleep 5)
-       (when (is-connected new-logger)
-         (log-reconnection new-logger)))))
+    (do ((new-logger nil))
+        (new-logger)
+      (setq new-logger
+            (ignore-errors
+              (add-logger *recon-nick* *recon-server*
+                          :channels *recon-channel-names*
+                          :output *recon-user-output*
+                          :password *recon-password*
+                          :realname *recon-realname*
+                          :username *recon-username*
+                          :logging-stream *recon-logging-stream*
+                          :private-log *recon-private-log*
+                          :unknown-log *recon-unknown-log*
+                          :async *recon-async*
+                          :formats *recon-formats*)))
+      (cond
+       (new-logger
+       (sleep 20)
+       (cond
+         ((is-connected new-logger)
+          (log-reconnection new-logger))
+         (t
+          (log-daemon-message new-logger "Newly added logger is not connected. Removing connection and will re-attempt.")
+          (ignore-errors (remove-logger new-logger))
+          (setq new-logger nil))))
+       (t
+        (log-daemon-message nil "Got NIL for new logger. Waiting and retrying.")
+        (sleep 20)))))
   ) ;; end closure
 
 (defun daemon-monitor ()