diff --git a/src/App.php b/src/App.php index 1fb79decea..cfe254581a 100644 --- a/src/App.php +++ b/src/App.php @@ -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; diff --git a/src/Core/Logger.php b/src/Core/Logger.php index 6102baa5a5..fe39d3feb2 100644 --- a/src/Core/Logger.php +++ b/src/Core/Logger.php @@ -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; } diff --git a/src/Util/LoggerFactory.php b/src/Util/LoggerFactory.php index d99093efe4..e94cd2e971 100644 --- a/src/Util/LoggerFactory.php +++ b/src/Util/LoggerFactory.php @@ -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'); + } + } } diff --git a/tests/include/ApiTest.php b/tests/include/ApiTest.php index ede84a0eb9..cf7571073a 100644 --- a/tests/include/ApiTest.php +++ b/tests/include/ApiTest.php @@ -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 = [ diff --git a/tests/src/BaseObjectTest.php b/tests/src/BaseObjectTest.php index 9743ca887f..7b9ff3aa15 100644 --- a/tests/src/BaseObjectTest.php +++ b/tests/src/BaseObjectTest.php @@ -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()); }