Add analytics
[bus.git] / busui / owa / includes / Log-1.12.2 / Log.php
blob:a/busui/owa/includes/Log-1.12.2/Log.php -> blob:b/busui/owa/includes/Log-1.12.2/Log.php
  <?php
  /**
  * $Header$
  * $Horde: horde/lib/Log.php,v 1.15 2000/06/29 23:39:45 jon Exp $
  *
  * @version $Revision: 302787 $
  * @package Log
  */
   
  define('PEAR_LOG_EMERG', 0); /* System is unusable */
  define('PEAR_LOG_ALERT', 1); /* Immediate action required */
  define('PEAR_LOG_CRIT', 2); /* Critical conditions */
  define('PEAR_LOG_ERR', 3); /* Error conditions */
  define('PEAR_LOG_WARNING', 4); /* Warning conditions */
  define('PEAR_LOG_NOTICE', 5); /* Normal but significant */
  define('PEAR_LOG_INFO', 6); /* Informational */
  define('PEAR_LOG_DEBUG', 7); /* Debug-level messages */
   
  define('PEAR_LOG_ALL', 0xffffffff); /* All messages */
  define('PEAR_LOG_NONE', 0x00000000); /* No message */
   
  /* Log types for PHP's native error_log() function. */
  define('PEAR_LOG_TYPE_SYSTEM', 0); /* Use PHP's system logger */
  define('PEAR_LOG_TYPE_MAIL', 1); /* Use PHP's mail() function */
  define('PEAR_LOG_TYPE_DEBUG', 2); /* Use PHP's debugging connection */
  define('PEAR_LOG_TYPE_FILE', 3); /* Append to a file */
  define('PEAR_LOG_TYPE_SAPI', 4); /* Use the SAPI logging handler */
   
  /**
  * The Log:: class implements both an abstraction for various logging
  * mechanisms and the Subject end of a Subject-Observer pattern.
  *
  * @author Chuck Hagenbuch <chuck@horde.org>
  * @author Jon Parise <jon@php.net>
  * @since Horde 1.3
  * @package Log
  */
  class Log
  {
  /**
  * Indicates whether or not the log can been opened / connected.
  *
  * @var boolean
  * @access protected
  */
  var $_opened = false;
   
  /**
  * Instance-specific unique identification number.
  *
  * @var integer
  * @access protected
  */
  var $_id = 0;
   
  /**
  * The label that uniquely identifies this set of log messages.
  *
  * @var string
  * @access protected
  */
  var $_ident = '';
   
  /**
  * The default priority to use when logging an event.
  *
  * @var integer
  * @access protected
  */
  var $_priority = PEAR_LOG_INFO;
   
  /**
  * The bitmask of allowed log levels.
  *
  * @var integer
  * @access protected
  */
  var $_mask = PEAR_LOG_ALL;
   
  /**
  * Holds all Log_observer objects that wish to be notified of new messages.
  *
  * @var array
  * @access protected
  */
  var $_listeners = array();
   
  /**
  * Maps canonical format keys to position arguments for use in building
  * "line format" strings.
  *
  * @var array
  * @access protected
  */
  var $_formatMap = array('%{timestamp}' => '%1$s',
  '%{ident}' => '%2$s',
  '%{priority}' => '%3$s',
  '%{message}' => '%4$s',
  '%{file}' => '%5$s',
  '%{line}' => '%6$s',
  '%{function}' => '%7$s',
  '%{class}' => '%8$s',
  '%\{' => '%%{');
   
  /**
  * Attempts to return a concrete Log instance of type $handler.
  *
  * @param string $handler The type of concrete Log subclass to return.
  * Attempt to dynamically include the code for
  * this subclass. Currently, valid values are
  * 'console', 'syslog', 'sql', 'file', and 'mcal'.
  *
  * @param string $name The name of the actually log file, table, or
  * other specific store to use. Defaults to an
  * empty string, with which the subclass will
  * attempt to do something intelligent.
  *
  * @param string $ident The identity reported to the log system.
  *
  * @param array $conf A hash containing any additional configuration
  * information that a subclass might need.
  *
  * @param int $level Log messages up to and including this level.
  *
  * @return object Log The newly created concrete Log instance, or
  * null on an error.
  * @access public
  * @since Log 1.0
  */
  public static function factory($handler, $name = '', $ident = '',
  $conf = array(), $level = PEAR_LOG_DEBUG)
  {
  $handler = strtolower($handler);
  $class = 'Log_' . $handler;
  $classfile = 'Log/' . $handler . '.php';
   
  /*
  * Attempt to include our version of the named class, but don't treat
  * a failure as fatal. The caller may have already included their own
  * version of the named class.
  */
  if (!class_exists($class, false)) {
  include_once $classfile;
  }
   
  /* If the class exists, return a new instance of it. */
  if (class_exists($class, false)) {
  $obj = new $class($name, $ident, $conf, $level);
  return $obj;
  }
   
  $null = null;
  return $null;
  }
   
  /**
  * Attempts to return a reference to a concrete Log instance of type
  * $handler, only creating a new instance if no log instance with the same
  * parameters currently exists.
  *
  * You should use this if there are multiple places you might create a
  * logger, you don't want to create multiple loggers, and you don't want to
  * check for the existance of one each time. The singleton pattern does all
  * the checking work for you.
  *
  * <b>You MUST call this method with the $var = &Log::singleton() syntax.
  * Without the ampersand (&) in front of the method name, you will not get
  * a reference, you will get a copy.</b>
  *
  * @param string $handler The type of concrete Log subclass to return.
  * Attempt to dynamically include the code for
  * this subclass. Currently, valid values are
  * 'console', 'syslog', 'sql', 'file', and 'mcal'.
  *
  * @param string $name The name of the actually log file, table, or
  * other specific store to use. Defaults to an
  * empty string, with which the subclass will
  * attempt to do something intelligent.
  *
  * @param string $ident The identity reported to the log system.
  *
  * @param array $conf A hash containing any additional configuration
  * information that a subclass might need.
  *
  * @param int $level Log messages up to and including this level.
  *
  * @return object Log The newly created concrete Log instance, or
  * null on an error.
  * @access public
  * @since Log 1.0
  */
  public static function singleton($handler, $name = '', $ident = '',
  $conf = array(), $level = PEAR_LOG_DEBUG)
  {
  static $instances;
  if (!isset($instances)) $instances = array();
   
  $signature = serialize(array($handler, $name, $ident, $conf, $level));
  if (!isset($instances[$signature])) {
  $instances[$signature] = Log::factory($handler, $name, $ident,
  $conf, $level);
  }
   
  return $instances[$signature];
  }
   
  /**
  * Abstract implementation of the open() method.
  * @since Log 1.0
  */
  function open()
  {
  return false;
  }
   
  /**
  * Abstract implementation of the close() method.
  * @since Log 1.0
  */
  function close()
  {
  return false;
  }
   
  /**
  * Abstract implementation of the flush() method.
  * @since Log 1.8.2
  */
  function flush()
  {
  return false;
  }
   
  /**
  * Abstract implementation of the log() method.
  * @since Log 1.0
  */
  function log($message, $priority = null)
  {
  return false;
  }
   
  /**
  * A convenience function for logging a emergency event. It will log a
  * message at the PEAR_LOG_EMERG log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function emerg($message)
  {
  return $this->log($message, PEAR_LOG_EMERG);
  }
   
  /**
  * A convenience function for logging an alert event. It will log a
  * message at the PEAR_LOG_ALERT log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function alert($message)
  {
  return $this->log($message, PEAR_LOG_ALERT);
  }
   
  /**
  * A convenience function for logging a critical event. It will log a
  * message at the PEAR_LOG_CRIT log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function crit($message)
  {
  return $this->log($message, PEAR_LOG_CRIT);
  }
   
  /**
  * A convenience function for logging a error event. It will log a
  * message at the PEAR_LOG_ERR log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function err($message)
  {
  return $this->log($message, PEAR_LOG_ERR);
  }
   
  /**
  * A convenience function for logging a warning event. It will log a
  * message at the PEAR_LOG_WARNING log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function warning($message)
  {
  return $this->log($message, PEAR_LOG_WARNING);
  }
   
  /**
  * A convenience function for logging a notice event. It will log a
  * message at the PEAR_LOG_NOTICE log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function notice($message)
  {
  return $this->log($message, PEAR_LOG_NOTICE);
  }
   
  /**
  * A convenience function for logging a information event. It will log a
  * message at the PEAR_LOG_INFO log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function info($message)
  {
  return $this->log($message, PEAR_LOG_INFO);
  }
   
  /**
  * A convenience function for logging a debug event. It will log a
  * message at the PEAR_LOG_DEBUG log level.
  *
  * @param mixed $message String or object containing the message
  * to log.
  *
  * @return boolean True if the message was successfully logged.
  *
  * @access public
  * @since Log 1.7.0
  */
  function debug($message)
  {
  return $this->log($message, PEAR_LOG_DEBUG);
  }