Author: ihabunek
Date: Sat Aug 18 10:22:19 2012
New Revision: 1374546

URL: http://svn.apache.org/viewvc?rev=1374546&view=rev
Log:
LoggerAppenderPDO: Fixed reconnect logic.

Modified:
    logging/log4php/trunk/src/main/php/appenders/LoggerAppenderPDO.php

Modified: logging/log4php/trunk/src/main/php/appenders/LoggerAppenderPDO.php
URL: 
http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/appenders/LoggerAppenderPDO.php?rev=1374546&r1=1374545&r2=1374546&view=diff
==============================================================================
--- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderPDO.php 
(original)
+++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderPDO.php Sat Aug 
18 10:22:19 2012
@@ -119,7 +119,7 @@ class LoggerAppenderPDO extends LoggerAp
                try {
                        $this->establishConnection();
                } catch (PDOException $e) {
-                       $this->warn("Failed connecting to database: " . 
$e->getMessage());
+                       $this->warn("Failed connecting to database. Closing 
appender. Error: " . $e->getMessage());
                        $this->close();
                        return;
                }
@@ -157,27 +157,24 @@ class LoggerAppenderPDO extends LoggerAp
         * the appender will close.
         */
        public function append(LoggerLoggingEvent $event) {
-               
-               for ($attempt = 1; $attempt <= $this->reconnectAttempts; 
$attempt++) {
+
+               for ($attempt = 1; $attempt <= $this->reconnectAttempts + 1; 
$attempt++) {
                        try {
-                               // If it's a retry, reestablish the connection
-                               if ($attempt > 1) {
-                                       $this->establishConnection();
-                               }
-                               
-                               // Write to database
-                               
@$this->preparedInsert->execute($this->format($event));
-                               @$this->preparedInsert->closeCursor();
+                               // Attempt to write to database
+                               
$this->preparedInsert->execute($this->format($event));
+                               $this->preparedInsert->closeCursor();
                                break;
                        } catch (PDOException $e) {
                                $this->warn("Failed writing to database: ". 
$e->getMessage());
                                
                                // Close the appender if it's the last attempt
-                               if ($attempt == $this->reconnectAttempts) {
-                                       $this->warn("Failed after 
{$this->reconnectAttempts} attempts. Closing appender.");
+                               if ($attempt > $this->reconnectAttempts) {
+                                       $this->warn("Failed writing to database 
after {$this->reconnectAttempts} reconnect attempts. Closing appender.");
                                        $this->close();
+                               // Otherwise reconnect and try to write again
                                } else {
                                        $this->warn("Attempting a reconnect 
(attempt $attempt of {$this->reconnectAttempts}).");
+                                       $this->establishConnection();
                                }
                        }
                }


Reply via email to