Author: chammers
Date: Sat Oct 10 16:31:07 2009
New Revision: 823882

URL: http://svn.apache.org/viewvc?rev=823882&view=rev
Log:
* Keep @ before fsockopen but afterwards test return value and not errno which 
can be 0.
* Now __destruct() checks if $this->sp is really set
* If the remote host cannot be reached an LoggerException is raised instead of 
silently disabling logging
* Added testcase

Modified:
    incubator/log4php/trunk/src/main/php/appenders/LoggerAppenderSocket.php
    incubator/log4php/trunk/src/test/php/appenders/LoggerAppenderSocketTest.php

Modified: 
incubator/log4php/trunk/src/main/php/appenders/LoggerAppenderSocket.php
URL: 
http://svn.apache.org/viewvc/incubator/log4php/trunk/src/main/php/appenders/LoggerAppenderSocket.php?rev=823882&r1=823881&r2=823882&view=diff
==============================================================================
--- incubator/log4php/trunk/src/main/php/appenders/LoggerAppenderSocket.php 
(original)
+++ incubator/log4php/trunk/src/main/php/appenders/LoggerAppenderSocket.php Sat 
Oct 10 16:31:07 2009
@@ -102,31 +102,28 @@
         * Create a socket connection using defined parameters
         */
        public function activateOptions() {
-               $errno = 0;
-               $errstr = '';
                if(!$this->dry) {
                        $this->sp = @fsockopen($this->getRemoteHost(), 
$this->getPort(), $errno, $errstr, $this->getTimeout());
-               }
-               if($errno) {
-                       $this->closed = true;
-               } else {
-                       if($this->getUseXml()) {
-                               $this->xmlLayout = 
LoggerReflectionUtils::createObject('LoggerLayoutXml');
-                               if($this->xmlLayout === null) {
-                                       $this->setUseXml(false);
-                               } else {
-                                       
$this->xmlLayout->setLocationInfo($this->getLocationInfo());
-                                       
$this->xmlLayout->setLog4jNamespace($this->getLog4jNamespace());
-                                       $this->xmlLayout->activateOptions();
-                               }                        
+                       if ($this->sp === false) {
+                           throw new LoggerException("Could not open socket to 
".$this->getRemoteHost().":".$this->getPort().": $errstr ($errno)");
                        }
-                       $this->closed = false;
                }
+               if($this->getUseXml()) {
+                       $this->xmlLayout = 
LoggerReflectionUtils::createObject('LoggerLayoutXml');
+                       if($this->xmlLayout === null) {
+                               $this->setUseXml(false);
+                       } else {
+                               
$this->xmlLayout->setLocationInfo($this->getLocationInfo());
+                               
$this->xmlLayout->setLog4jNamespace($this->getLog4jNamespace());
+                               $this->xmlLayout->activateOptions();
+                       }                        
+               }
+        $this->closed = false;
        }
        
        public function close() {
                if($this->closed != true) {
-                       if(!$this->dry) {
+                       if(!$this->dry and $this->sp !== false) {
                                fclose($this->sp);
                        }
                        $this->closed = true;

Modified: 
incubator/log4php/trunk/src/test/php/appenders/LoggerAppenderSocketTest.php
URL: 
http://svn.apache.org/viewvc/incubator/log4php/trunk/src/test/php/appenders/LoggerAppenderSocketTest.php?rev=823882&r1=823881&r2=823882&view=diff
==============================================================================
--- incubator/log4php/trunk/src/test/php/appenders/LoggerAppenderSocketTest.php 
(original)
+++ incubator/log4php/trunk/src/test/php/appenders/LoggerAppenderSocketTest.php 
Sat Oct 10 16:31:07 2009
@@ -67,4 +67,18 @@
                self::assertEquals($e, $v);
     }
     
+    /** Tests Exception due to unreachable remote host.
+     * 
+     * @expectedException LoggerException
+     */
+    public function testSocketProblem() {
+        $appender = new LoggerAppenderSocket("myname ");
+        $appender->setDry(false);
+        $appender->setRemoteHost("does.not.exists");
+        $appender->setPort(1234);
+        $appender->activateOptions();
+        $event = new LoggerLoggingEvent("LoggerAppenderSocketTest", new 
Logger("TEST"), LoggerLevel::getLevelError(), "testmessage");
+        
+        $appender->append($event);
+    }
 }


Reply via email to