Browse Source
destaticfy Log classes
destaticfy Log classes
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>pull/9293/head
committed by
Morris Jobke
No known key found for this signature in database
GPG Key ID: FE03C3A163FEDE68
15 changed files with 356 additions and 117 deletions
-
2apps/dav/tests/unit/Connector/Sabre/ExceptionLoggerPluginTest.php
-
3lib/composer/composer/autoload_classmap.php
-
3lib/composer/composer/autoload_static.php
-
46lib/private/Log.php
-
11lib/private/Log/Errorlog.php
-
52lib/private/Log/File.php
-
30lib/private/Log/IFileBased.php
-
28lib/private/Log/IWritable.php
-
66lib/private/Log/LogFactory.php
-
17lib/private/Log/Syslog.php
-
5lib/private/Server.php
-
17settings/Controller/LogSettingsController.php
-
11tests/lib/Log/FileTest.php
-
149tests/lib/Log/LogFactoryTest.php
-
33tests/lib/LoggerTest.php
@ -0,0 +1,30 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Log; |
|||
|
|||
interface IFileBased { |
|||
public function getLogFilePath(); |
|||
|
|||
public function getEntries($limit=50, $offset=0); |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Log; |
|||
|
|||
interface IWritable { |
|||
public function write($app, $message, $level); |
|||
} |
|||
@ -0,0 +1,66 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace OC\Log; |
|||
|
|||
use OCP\IServerContainer; |
|||
|
|||
class LogFactory { |
|||
/** @var IServerContainer */ |
|||
private $c; |
|||
|
|||
public function __construct(IServerContainer $c) { |
|||
$this->c = $c; |
|||
} |
|||
|
|||
/** |
|||
* @param $type |
|||
* @return \OC\Log\Errorlog|File|\stdClass |
|||
* @throws \OCP\AppFramework\QueryException |
|||
*/ |
|||
public function get($type) { |
|||
switch (strtolower($type)) { |
|||
case 'errorlog': |
|||
return new Errorlog(); |
|||
case 'syslog': |
|||
return $this->c->resolve(Syslog::class); |
|||
case 'file': |
|||
return $this->buildLogFile(); |
|||
|
|||
// Backwards compatibility for old and fallback for unknown log types
|
|||
case 'owncloud': |
|||
case 'nextcloud': |
|||
default: |
|||
return $this->buildLogFile(); |
|||
} |
|||
} |
|||
|
|||
protected function buildLogFile() { |
|||
$config = $this->c->getConfig(); |
|||
$defaultLogFile = $config->getSystemValue('datadirectory', \OC::$SERVERROOT.'/data').'/nextcloud.log'; |
|||
$logFile = $config->getSystemValue('logfile', $defaultLogFile); |
|||
$fallback = $defaultLogFile !== $logFile ? $defaultLogFile : ''; |
|||
|
|||
return new File($logFile, $fallback); |
|||
} |
|||
} |
|||
@ -0,0 +1,149 @@ |
|||
<?php |
|||
/** |
|||
* @copyright Copyright (c) 2018 Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @author Arthur Schiwon <blizzz@arthur-schiwon.de> |
|||
* |
|||
* @license GNU AGPL version 3 or any later version |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU Affero General Public License as |
|||
* published by the Free Software Foundation, either version 3 of the |
|||
* License, or (at your option) any later version. |
|||
* |
|||
* This program is distributed in the hope that it will be useful, |
|||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
* GNU Affero General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU Affero General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
*/ |
|||
|
|||
namespace Test\Log; |
|||
use OC\Log\Errorlog; |
|||
use OC\Log\File; |
|||
use OC\Log\LogFactory; |
|||
use OC\Log\Syslog; |
|||
use OCP\IConfig; |
|||
use OCP\IServerContainer; |
|||
use Test\TestCase; |
|||
|
|||
/** |
|||
* Class LogFactoryTest |
|||
* |
|||
* @package Test\Log |
|||
*/ |
|||
class LogFactoryTest extends TestCase { |
|||
/** @var IServerContainer|\PHPUnit_Framework_MockObject_MockObject */ |
|||
protected $c; |
|||
|
|||
/** @var LogFactory */ |
|||
protected $factory; |
|||
|
|||
protected function setUp() { |
|||
parent::setUp(); |
|||
|
|||
$this->c = $this->createMock(IServerContainer::class); |
|||
|
|||
$this->factory = new LogFactory($this->c); |
|||
} |
|||
|
|||
public function fileTypeProvider(): array { |
|||
return [ |
|||
[ |
|||
'file' |
|||
], |
|||
[ |
|||
'nextcloud' |
|||
], |
|||
[ |
|||
'owncloud' |
|||
], |
|||
[ |
|||
'krzxkyr_default' |
|||
] |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* @param string $type |
|||
* @dataProvider fileTypeProvider |
|||
* @throws \OCP\AppFramework\QueryException |
|||
*/ |
|||
public function testFile(string $type) { |
|||
$datadir = \OC::$SERVERROOT.'/data'; |
|||
$defaultLog = $datadir . '/nextcloud.log'; |
|||
|
|||
$config = $this->createMock(IConfig::class); |
|||
$config->expects($this->exactly(2)) |
|||
->method('getSystemValue') |
|||
->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog]) |
|||
->willReturnOnConsecutiveCalls($datadir, $defaultLog); |
|||
|
|||
$this->c->expects($this->any()) |
|||
->method('getConfig') |
|||
->willReturn($config); |
|||
|
|||
$log = $this->factory->get($type); |
|||
$this->assertInstanceOf(File::class, $log); |
|||
} |
|||
|
|||
public function logFilePathProvider():array { |
|||
return [ |
|||
[ |
|||
'/dev/null', |
|||
'/dev/null' |
|||
], |
|||
[ |
|||
'/xdev/youshallfallback', |
|||
\OC::$SERVERROOT.'/data/nextcloud.log' |
|||
] |
|||
]; |
|||
} |
|||
|
|||
/** |
|||
* @dataProvider logFilePathProvider |
|||
* @throws \OCP\AppFramework\QueryException |
|||
*/ |
|||
public function testFileCustomPath($path, $expected) { |
|||
$datadir = \OC::$SERVERROOT.'/data'; |
|||
$defaultLog = $datadir . '/nextcloud.log'; |
|||
|
|||
$config = $this->createMock(IConfig::class); |
|||
$config->expects($this->exactly(2)) |
|||
->method('getSystemValue') |
|||
->withConsecutive(['datadirectory', $datadir], ['logfile', $defaultLog]) |
|||
->willReturnOnConsecutiveCalls($datadir, $path); |
|||
|
|||
$this->c->expects($this->any()) |
|||
->method('getConfig') |
|||
->willReturn($config); |
|||
|
|||
$log = $this->factory->get('file'); |
|||
$this->assertInstanceOf(File::class, $log); |
|||
$this->assertSame($expected, $log->getLogFilePath()); |
|||
} |
|||
|
|||
/** |
|||
* @throws \OCP\AppFramework\QueryException |
|||
*/ |
|||
public function testErrorLog() { |
|||
$log = $this->factory->get('errorlog'); |
|||
$this->assertInstanceOf(Errorlog::class, $log); |
|||
} |
|||
|
|||
/** |
|||
* @throws \OCP\AppFramework\QueryException |
|||
*/ |
|||
public function testSystemLog() { |
|||
$this->c->expects($this->once()) |
|||
->method('resolve') |
|||
->with(Syslog::class) |
|||
->willReturn($this->createMock(Syslog::class)); |
|||
|
|||
$log = $this->factory->get('syslog'); |
|||
$this->assertInstanceOf(Syslog::class, $log); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue