10 define(
'PEAR_LOG_EMERG', 0);
11 define(
'PEAR_LOG_ALERT', 1);
12 define(
'PEAR_LOG_CRIT', 2);
13 define(
'PEAR_LOG_ERR', 3);
14 define(
'PEAR_LOG_WARNING', 4);
15 define(
'PEAR_LOG_NOTICE', 5);
16 define(
'PEAR_LOG_INFO', 6);
17 define(
'PEAR_LOG_DEBUG', 7);
19 define(
'PEAR_LOG_ALL', 0xffffffff);
20 define(
'PEAR_LOG_NONE', 0x00000000);
23 define(
'PEAR_LOG_TYPE_SYSTEM', 0);
24 define(
'PEAR_LOG_TYPE_MAIL', 1);
25 define(
'PEAR_LOG_TYPE_DEBUG', 2);
26 define(
'PEAR_LOG_TYPE_FILE', 3);
96 '%{priority}' =>
'%3$s',
97 '%{message}' =>
'%4$s',
100 '%{function}' =>
'%7$s',
101 '%{class}' =>
'%8$s',
119 if (version_compare(PHP_VERSION,
'5.0.0',
'ge')) {
120 return class_exists($class,
false);
123 return class_exists($class);
151 function &
factory($handler, $name =
'', $ident =
'', $conf = array(),
154 $handler = strtolower($handler);
155 $class =
'Log_' . $handler;
156 $classfile =
'Log/' . $handler .
'.php';
164 include_once $classfile;
169 $obj =
new $class($name, $ident, $conf, $level);
213 function &
singleton($handler, $name =
'', $ident =
'', $conf = array(),
217 if (!isset($instances)) $instances = array();
219 $signature = serialize(array($handler, $name, $ident, $conf, $level));
220 if (!isset($instances[$signature])) {
221 $instances[$signature] = &
Log::factory($handler, $name, $ident,
225 return $instances[$signature];
259 function log($message, $priority = null)
426 if (is_object($message)) {
427 if (method_exists($message,
'getmessage')) {
428 $message = $message->getMessage();
429 }
else if (method_exists($message,
'tostring')) {
430 $message = $message->toString();
431 }
else if (method_exists($message,
'__tostring')) {
432 if (version_compare(PHP_VERSION,
'5.0.0',
'ge')) {
433 $message = (string)$message;
435 $message = $message->__toString();
438 $message = var_export($message,
true);
440 }
else if (is_array($message)) {
441 if (isset($message[
'message'])) {
442 if (is_scalar($message[
'message'])) {
443 $message = $message[
'message'];
445 $message = var_export($message[
'message'],
true);
448 $message = var_export($message,
true);
450 }
else if (is_bool($message) || $message === NULL) {
451 $message = var_export($message,
true);
475 $bt = debug_backtrace();
481 $class = isset($bt[$depth+1][
'class']) ? $bt[$depth+1][
'class'] : null;
482 if ($class !== null && strcasecmp($class,
'Log_composite') == 0) {
484 $class = isset($bt[$depth + 1]) ? $bt[$depth + 1][
'class'] : null;
494 $file = isset($bt[$depth]) ? $bt[$depth][
'file'] : null;
495 $line = isset($bt[$depth]) ? $bt[$depth][
'line'] : 0;
496 $func = isset($bt[$depth + 1]) ? $bt[$depth + 1][
'function'] : null;
502 if (in_array($func, array(
'emerg',
'alert',
'crit',
'err',
'warning',
503 'notice',
'info',
'debug'))) {
504 $file = isset($bt[$depth + 1]) ? $bt[$depth + 1][
'file'] : null;
505 $line = isset($bt[$depth + 1]) ? $bt[$depth + 1][
'line'] : 0;
506 $func = isset($bt[$depth + 2]) ? $bt[$depth + 2][
'function'] : null;
513 if (is_null($func)) {
518 return array(
$file, $line, $func, $class);
536 if (preg_match(
'/%[5678]/', $format)) {
545 return sprintf($format,
551 isset($line) ? $line :
'',
552 isset($func) ? $func :
'',
553 isset($class) ? $class :
'');
579 return $levels[$priority];
608 return $levels[strtolower($name)];
625 return (1 << $priority);
682 return ((1 << ($priority + 1)) - 1);
697 $this->_mask = $mask;
728 return (
Log::MASK($priority) & $this->_mask);
754 $this->_priority = $priority;
771 if (!is_a($observer,
'Log_observer')) {
775 $this->_listeners[$observer->_id] = &$observer;
793 if (!is_a($observer,
'Log_observer') ||
794 !isset($this->_listeners[$observer->_id])) {
798 unset($this->_listeners[$observer->_id]);
813 foreach ($this->_listeners as $id => $listener) {
814 if ($event[
'priority'] <= $this->_listeners[$id]->_priority) {
815 $this->_listeners[$id]->notify($event);
843 $this->_ident = $ident;