Bugfixing
authorPhilipp Holzer <admin@philipp.info>
Tue, 1 Jan 2019 20:57:16 +0000 (21:57 +0100)
committerHypolite Petovan <hypolite@mrpetovan.com>
Mon, 21 Jan 2019 14:59:11 +0000 (09:59 -0500)
src/App.php
src/Core/Logger.php
src/Util/LoggerFactory.php
tests/include/ApiTest.php
tests/src/BaseObjectTest.php

index 1fb79de..cfe2545 100644 (file)
@@ -8,6 +8,7 @@ use Detection\MobileDetect;
 use DOMDocument;
 use DOMXPath;
 use Exception;
+use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\Network\HTTPException\InternalServerErrorException;
 use Psr\Log\LoggerInterface;
index 6102baa..fe39d3f 100644 (file)
@@ -89,7 +89,10 @@ class Logger extends BaseObject
                        return;
                }
 
-               LoggerFactory::addStreamHandler($logger, $logfile, $loglevel);
+               $level = self::mapPSR3Level($loglevel);
+               LoggerFactory::addStreamHandler($logger, $logfile, $level);
+
+               self::$logger = $logger;
 
                $logfile = Config::get('system', 'dlogfile');
 
@@ -185,6 +188,7 @@ class Logger extends BaseObject
        public static function error($message, $context = [])
        {
                if (!isset(self::$logger)) {
+                       echo "not set!?\n";
                        return;
                }
 
index d99093e..e94cd2e 100644 (file)
@@ -68,7 +68,7 @@ class LoggerFactory
        public static function addStreamHandler($logger, $stream, $level = LogLevel::NOTICE)
        {
                if ($logger instanceof Monolog\Logger) {
-                       $fileHandler = new Monolog\Handler\StreamHandler($stream . ".1", Monolog\Logger::toMonologLevel($level));
+                       $fileHandler = new Monolog\Handler\StreamHandler($stream, Monolog\Logger::toMonologLevel($level));
 
                        $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n");
                        $fileHandler->setFormatter($formatter);
@@ -78,4 +78,32 @@ class LoggerFactory
                        throw new InternalServerErrorException('Logger instance incompatible for MonologFactory');
                }
        }
+
+       /**
+        * This method enables the test mode of a given logger
+        *
+        * @param LoggerInterface $logger The logger
+        *
+        * @return Monolog\Handler\TestHandler the Handling for tests
+        *
+        * @throws InternalServerErrorException if the logger is incompatible to the logger factory
+        */
+       public static function enableTest($logger)
+       {
+               if ($logger instanceof Monolog\Logger) {
+                       // disable every handler so far
+                       $logger->pushHandler(new Monolog\Handler\NullHandler());
+
+                       // enable the test handler
+                       $fileHandler = new Monolog\Handler\TestHandler();
+                       $formatter = new Monolog\Formatter\LineFormatter("%datetime% %channel% [%level_name%]: %message% %context% %extra%\n");
+                       $fileHandler->setFormatter($formatter);
+
+                       $logger->pushHandler($fileHandler);
+
+                       return $fileHandler;
+               } else {
+                       throw new InternalServerErrorException('Logger instance incompatible for MonologFactory');
+               }
+       }
 }
index ede84a0..cf75710 100644 (file)
@@ -11,6 +11,8 @@ use Friendica\Core\PConfig;
 use Friendica\Core\Protocol;
 use Friendica\Core\System;
 use Friendica\Network\HTTPException;
+use Friendica\Util\LoggerFactory;
+use Monolog\Handler\TestHandler;
 
 require_once __DIR__ . '/../../include/api.php';
 
@@ -22,6 +24,11 @@ require_once __DIR__ . '/../../include/api.php';
  */
 class ApiTest extends DatabaseTest
 {
+       /**
+        * @var TestHandler Can handle log-outputs
+        */
+       protected $logOutput;
+
        /**
         * Create variables used by tests.
         */
@@ -30,6 +37,7 @@ class ApiTest extends DatabaseTest
                parent::setUp();
 
                $this->app = BaseObject::getApp();
+               $this->logOutput = LoggerFactory::enableTest($this->app->getLogger());
 
                // User data that the test database is populated with
                $this->selfUser = [
index 9743ca8..7b9ff3a 100644 (file)
@@ -41,6 +41,7 @@ class BaseObjectTest extends TestCase
        {
                $logger = $logger = LoggerFactory::create('test');
                $app = new App(__DIR__ . '/../../', $logger);
+               LoggerFactory::enableTest($logger);
                $this->assertNull($this->baseObject->setApp($app));
                $this->assertEquals($app, $this->baseObject->getApp());
        }