Merge pull request #8482 from owncloud/public-logger
Make logger available in the container
This commit is contained in:
commit
1d18fd4e6d
|
@ -8,6 +8,8 @@
|
||||||
|
|
||||||
namespace OC;
|
namespace OC;
|
||||||
|
|
||||||
|
use \OCP\ILogger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* logging utilities
|
* logging utilities
|
||||||
*
|
*
|
||||||
|
@ -18,8 +20,24 @@ namespace OC;
|
||||||
* MonoLog is an example implementing this interface.
|
* MonoLog is an example implementing this interface.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class Log {
|
class Log implements ILogger {
|
||||||
private $logClass;
|
|
||||||
|
private $logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $logger The logger that should be used
|
||||||
|
*/
|
||||||
|
public function __construct($logger=null) {
|
||||||
|
// FIXME: Add this for backwards compatibility, should be fixed at some point probably
|
||||||
|
if($logger === null) {
|
||||||
|
$this->logger = 'OC_Log_'.ucfirst(\OC_Config::getValue('log_type', 'owncloud'));
|
||||||
|
call_user_func(array($this->logger, 'init'));
|
||||||
|
} else {
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* System is unusable.
|
* System is unusable.
|
||||||
|
@ -112,10 +130,6 @@ class Log {
|
||||||
$this->log(\OC_Log::DEBUG, $message, $context);
|
$this->log(\OC_Log::DEBUG, $message, $context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct() {
|
|
||||||
$this->logClass = 'OC_Log_'.ucfirst(\OC_Config::getValue('log_type', 'owncloud'));
|
|
||||||
call_user_func(array($this->logClass, 'init'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs with an arbitrary level.
|
* Logs with an arbitrary level.
|
||||||
|
@ -130,7 +144,16 @@ class Log {
|
||||||
} else {
|
} else {
|
||||||
$app = 'no app in context';
|
$app = 'no app in context';
|
||||||
}
|
}
|
||||||
$logClass=$this->logClass;
|
// interpolate $message as defined in PSR-3
|
||||||
$logClass::write($app, $message, $level);
|
$replace = array();
|
||||||
|
foreach ($context as $key => $val) {
|
||||||
|
$replace['{' . $key . '}'] = $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
// interpolate replacement values into the message and return
|
||||||
|
$message = strtr($message, $replace);
|
||||||
|
|
||||||
|
$logger = $this->logger;
|
||||||
|
$logger::write($app, $message, $level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,9 +31,9 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\OC::$session->exists('requesttoken')) {
|
if (\OC::$session->exists('requesttoken')) {
|
||||||
$requesttoken = \OC::$session->get('requesttoken');
|
$requestToken = \OC::$session->get('requesttoken');
|
||||||
} else {
|
} else {
|
||||||
$requesttoken = false;
|
$requestToken = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
|
if (defined('PHPUNIT_RUN') && PHPUNIT_RUN
|
||||||
|
@ -55,7 +55,7 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
? $_SERVER['REQUEST_METHOD']
|
? $_SERVER['REQUEST_METHOD']
|
||||||
: null,
|
: null,
|
||||||
'urlParams' => $urlParams,
|
'urlParams' => $urlParams,
|
||||||
'requesttoken' => $requesttoken,
|
'requesttoken' => $requestToken,
|
||||||
), $stream
|
), $stream
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -159,6 +159,14 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
$this->registerService('AvatarManager', function($c) {
|
$this->registerService('AvatarManager', function($c) {
|
||||||
return new AvatarManager();
|
return new AvatarManager();
|
||||||
});
|
});
|
||||||
|
$this->registerService('Logger', function($c) {
|
||||||
|
/** @var $c SimpleContainer */
|
||||||
|
$logClass = $c->query('AllConfig')->getSystemValue('log_type', 'owncloud');
|
||||||
|
$logger = 'OC_Log_' . ucfirst($logClass);
|
||||||
|
call_user_func(array($logger, 'init'));
|
||||||
|
|
||||||
|
return new Log($logger);
|
||||||
|
});
|
||||||
$this->registerService('JobList', function ($c) {
|
$this->registerService('JobList', function ($c) {
|
||||||
/**
|
/**
|
||||||
* @var Server $c
|
* @var Server $c
|
||||||
|
@ -329,14 +337,14 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \OC\URLGenerator
|
* @return \OCP\IURLGenerator
|
||||||
*/
|
*/
|
||||||
function getURLGenerator() {
|
function getURLGenerator() {
|
||||||
return $this->query('URLGenerator');
|
return $this->query('URLGenerator');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return \OC\Helper
|
* @return \OCP\IHelper
|
||||||
*/
|
*/
|
||||||
function getHelper() {
|
function getHelper() {
|
||||||
return $this->query('AppHelper');
|
return $this->query('AppHelper');
|
||||||
|
@ -396,6 +404,15 @@ class Server extends SimpleContainer implements IServerContainer {
|
||||||
return $this->query('JobList');
|
return $this->query('JobList');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a logger instance
|
||||||
|
*
|
||||||
|
* @return \OCP\ILogger
|
||||||
|
*/
|
||||||
|
function getLogger() {
|
||||||
|
return $this->query('Logger');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a router for generating and matching urls
|
* Returns a router for generating and matching urls
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Bernhard Posselt <dev@bernhard-posselt.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OCP;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface ILogger
|
||||||
|
* @package OCP
|
||||||
|
*
|
||||||
|
* This logger interface follows the design guidelines of PSR-3
|
||||||
|
* https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md#3-psrlogloggerinterface
|
||||||
|
*/
|
||||||
|
interface ILogger {
|
||||||
|
/**
|
||||||
|
* System is unusable.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function emergency($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action must be taken immediately.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function alert($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Critical conditions.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function critical($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runtime errors that do not require immediate action but should typically
|
||||||
|
* be logged and monitored.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function error($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exceptional occurrences that are not errors.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function warning($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normal but significant events.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function notice($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interesting events.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function info($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detailed debug information.
|
||||||
|
*
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return null
|
||||||
|
*/
|
||||||
|
function debug($message, array $context = array());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs with an arbitrary level.
|
||||||
|
*
|
||||||
|
* @param mixed $level
|
||||||
|
* @param string $message
|
||||||
|
* @param array $context
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
function log($level, $message, array $context = array());
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Thomas Müller <thomas.mueller@tmit.eu>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Test;
|
||||||
|
|
||||||
|
use OC\Log;
|
||||||
|
|
||||||
|
class Logger extends \PHPUnit_Framework_TestCase {
|
||||||
|
/**
|
||||||
|
* @var \OCP\ILogger
|
||||||
|
*/
|
||||||
|
private $logger;
|
||||||
|
static private $logs = array();
|
||||||
|
|
||||||
|
public function setUp() {
|
||||||
|
self::$logs = array();
|
||||||
|
$this->logger = new Log($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInterpolation() {
|
||||||
|
$logger = $this->logger;
|
||||||
|
$logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));
|
||||||
|
|
||||||
|
$expected = array('1 {Message {nothing} Bob Bar a}');
|
||||||
|
$this->assertEquals($expected, $this->getLogs());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getLogs() {
|
||||||
|
return self::$logs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function write($app, $message, $level) {
|
||||||
|
self::$logs[]= "$level $message";
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue