summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBart Visscher <bartv@thisnet.nl>2013-06-29 03:38:56 -0700
committerBart Visscher <bartv@thisnet.nl>2013-06-29 03:38:56 -0700
commit68c0d54568bb70f5bf7d30551beecd1fa3704683 (patch)
tree84da3915eb6f07f28538b1c04d6b59212c1f3494 /lib
parentd2f50bc0890821aeee5d293387b9840ad9d78da6 (diff)
parent1edf01d09f12843528be3137d6b6595edb9e0ec4 (diff)
downloadnextcloud-server-68c0d54568bb70f5bf7d30551beecd1fa3704683.tar.gz
nextcloud-server-68c0d54568bb70f5bf7d30551beecd1fa3704683.zip
Merge pull request #3268 from owncloud/convert-oc_log
Convert OC_Log to object so it can be used for DI
Diffstat (limited to 'lib')
-rw-r--r--lib/legacy/log.php77
-rw-r--r--lib/log.php153
2 files changed, 187 insertions, 43 deletions
diff --git a/lib/legacy/log.php b/lib/legacy/log.php
new file mode 100644
index 00000000000..7802ead2412
--- /dev/null
+++ b/lib/legacy/log.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+/**
+ * logging utilities
+ *
+ * Log is saved by default at data/owncloud.log using OC_Log_Owncloud.
+ * Selecting other backend is done with a config option 'log_type'.
+ */
+
+OC_Log::$object = new \OC\Log();
+class OC_Log {
+ public static $object;
+
+ const DEBUG=0;
+ const INFO=1;
+ const WARN=2;
+ const ERROR=3;
+ const FATAL=4;
+
+ static private $level_funcs = array(
+ self::DEBUG => 'debug',
+ self::INFO => 'info',
+ self::WARN => 'warning',
+ self::ERROR => 'error',
+ self::FATAL => 'emergency',
+ );
+
+ static public $enabled = true;
+ static protected $class = null;
+
+ /**
+ * write a message in the log
+ * @param string $app
+ * @param string $message
+ * @param int $level
+ */
+ public static function write($app, $message, $level) {
+ if (self::$enabled) {
+ $context = array('app' => $app);
+ $func = array(self::$object, self::$level_funcs[$level]);
+ call_user_func($func, $message, $context);
+ }
+ }
+
+ //Fatal errors handler
+ public static function onShutdown() {
+ $error = error_get_last();
+ if($error) {
+ //ob_end_clean();
+ self::write('PHP', $error['message'] . ' at ' . $error['file'] . '#' . $error['line'], self::FATAL);
+ } else {
+ return true;
+ }
+ }
+
+ // Uncaught exception handler
+ public static function onException($exception) {
+ self::write('PHP',
+ $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(),
+ self::FATAL);
+ }
+
+ //Recoverable errors handler
+ public static function onError($number, $message, $file, $line) {
+ if (error_reporting() === 0) {
+ return;
+ }
+ self::write('PHP', $message . ' at ' . $file . '#' . $line, self::WARN);
+
+ }
+}
diff --git a/lib/log.php b/lib/log.php
index 3f3334801e5..e0b9fe3c696 100644
--- a/lib/log.php
+++ b/lib/log.php
@@ -1,69 +1,136 @@
<?php
/**
- * Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
+ * Copyright (c) 2013 Bart Visscher <bartv@thisnet.nl>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
+namespace OC;
+
/**
* logging utilities
*
- * Log is saved by default at data/owncloud.log using OC_Log_Owncloud.
- * Selecting other backend is done with a config option 'log_type'.
+ * This is a stand in, this should be replaced by a Psr\Log\LoggerInterface
+ * compatible logger. See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
+ * for the full interface specification.
+ *
+ * MonoLog is an example implementing this interface.
*/
-class OC_Log {
- const DEBUG=0;
- const INFO=1;
- const WARN=2;
- const ERROR=3;
- const FATAL=4;
+class Log {
+ private $logClass;
- static public $enabled = true;
- static protected $class = null;
+ /**
+ * System is unusable.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function emergency($message, array $context = array()) {
+ $this->log(\OC_Log::FATAL, $message, $context);
+ }
/**
- * write a message in the log
- * @param string $app
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
* @param string $message
- * @param int level
+ * @param array $context
*/
- public static function write($app, $message, $level) {
- if (self::$enabled) {
- if (!self::$class) {
- self::$class = 'OC_Log_'.ucfirst(OC_Config::getValue('log_type', 'owncloud'));
- call_user_func(array(self::$class, 'init'));
- }
- $log_class=self::$class;
- $log_class::write($app, $message, $level);
- }
+ public function alert($message, array $context = array()) {
+ $this->log(\OC_Log::ERROR, $message, $context);
}
- //Fatal errors handler
- public static function onShutdown() {
- $error = error_get_last();
- if($error) {
- //ob_end_clean();
- self::write('PHP', $error['message'] . ' at ' . $error['file'] . '#' . $error['line'], self::FATAL);
- } else {
- return true;
- }
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function critical($message, array $context = array()) {
+ $this->log(\OC_Log::ERROR, $message, $context);
}
- // Uncaught exception handler
- public static function onException($exception) {
- self::write('PHP',
- $exception->getMessage() . ' at ' . $exception->getFile() . '#' . $exception->getLine(),
- self::FATAL);
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function error($message, array $context = array()) {
+ $this->log(\OC_Log::ERROR, $message, $context);
}
- //Recoverable errors handler
- public static function onError($number, $message, $file, $line) {
- if (error_reporting() === 0) {
- return;
- }
- self::write('PHP', $message . ' at ' . $file . '#' . $line, self::WARN);
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function warning($message, array $context = array()) {
+ $this->log(\OC_Log::WARN, $message, $context);
+ }
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function notice($message, array $context = array()) {
+ $this->log(\OC_Log::INFO, $message, $context);
+ }
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function info($message, array $context = array()) {
+ $this->log(\OC_Log::INFO, $message, $context);
+ }
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param array $context
+ */
+ public function debug($message, array $context = array()) {
+ $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.
+ *
+ * @param mixed $level
+ * @param string $message
+ * @param array $context
+ */
+ public function log($level, $message, array $context = array()) {
+ if (isset($context['app'])) {
+ $app = $context['app'];
+ } else {
+ $app = 'no app in context';
+ }
+ $logClass=$this->logClass;
+ $logClass::write($app, $message, $level);
}
}