Merge pull request #3011 from nextcloud/backport-2951-handle-nextcloud-log-type-gracefully

[stable11] Handle log_type "nextcloud" more gracefully
This commit is contained in:
Roeland Jago Douma 2017-01-10 15:47:33 +01:00 committed by GitHub
commit 0474abe5c7
3 changed files with 43 additions and 8 deletions

View File

@ -106,12 +106,8 @@ class Log implements ILogger {
// FIXME: Add this for backwards compatibility, should be fixed at some point probably
if($logger === null) {
// TODO: Drop backwards compatibility for config in the future
$logType = $this->config->getValue('log_type', 'file');
if($logType==='owncloud') {
$logType = 'file';
}
$this->logger = 'OC\\Log\\'.ucfirst($logType);
$this->logger = static::getLogClass($logType);
call_user_func(array($this->logger, 'init'));
} else {
$this->logger = $logger;
@ -327,4 +323,26 @@ class Log implements ILogger {
$msg .= ': ' . json_encode($exception);
$this->error($msg, $context);
}
/**
* @param string $logType
* @return string
* @internal
*/
public static function getLogClass($logType) {
switch (strtolower($logType)) {
case 'errorlog':
return \OC\Log\Errorlog::class;
case 'syslog':
return \OC\Log\Syslog::class;
case 'file':
return \OC\Log\File::class;
// Backwards compatibility for old and fallback for unknown log types
case 'owncloud':
case 'nextcloud':
default:
return \OC\Log\File::class;
}
}
}

View File

@ -418,9 +418,8 @@ class Server extends ServerContainer implements IServerContainer {
);
});
$this->registerService('Logger', function (Server $c) {
$logClass = $c->query('AllConfig')->getSystemValue('log_type', 'file');
// TODO: Drop backwards compatibility for config in the future
$logger = 'OC\\Log\\' . ucfirst($logClass=='owncloud' ? 'file' : $logClass);
$logType = $c->query('AllConfig')->getSystemValue('log_type', 'file');
$logger = Log::getLogClass($logType);
call_user_func(array($logger, 'init'));
return new Log($logger);

View File

@ -138,4 +138,22 @@ class LoggerTest extends TestCase {
}
}
public function dataGetLogClass() {
return [
['file', \OC\Log\File::class],
['errorlog', \OC\Log\Errorlog::class],
['syslog', \OC\Log\Syslog::class],
['owncloud', \OC\Log\File::class],
['nextcloud', \OC\Log\File::class],
['foobar', \OC\Log\File::class],
];
}
/**
* @dataProvider dataGetLogClass
*/
public function testGetLogClass($type, $class) {
$this->assertEquals($class, Log::getLogClass($type));
}
}