--- nfo/php/libs/net.php.pear/Log/syslog.php 2002/10/25 15:15:23 1.1 +++ nfo/php/libs/net.php.pear/Log/syslog.php 2003/02/05 21:48:31 1.2 @@ -1,86 +1,136 @@ - - * @version $Revision: 1.1 $ - * @since Horde 1.3 - */ -class Log_syslog extends Log { - - // {{{ properties - - /** Integer holding the log facility to use. */ - var $name = LOG_SYSLOG; - - // }}} - - - // {{{ constructor - /** - * Constructs a new syslog object. - * - * @param $log_name (optional) The syslog facility. - * @param $ident (optional) The identity string. - * @param $conf (optional) The configuration array. - */ - function Log_syslog ($log_name = LOG_SYSLOG, $ident = '', $conf = false) { - $this->name = $log_name; - $this->ident = $ident; - } - // }}} - - - // {{{ open() - /** - * Opens a connection to the system logger, if it has not already - * been opened. This is implicitly called by log(), if necessary. - */ - function open () { - if (!$this->opened) { - openlog($this->ident, LOG_PID, $this->name); - $this->opened = true; - } - } - // }}} - - // {{{ close() - /** - * Closes the connection to the system logger, if it is open. - */ - function close () { - if ($this->opened) { - closelog(); - $this->opened = false; - } - } - // }}} - - // {{{ log() - /** - * Sends $message to the currently open syslog * connection. Calls - * open() if necessary. Also passes the message along to any Log_observer - * instances that are observing this Log. - * - * @param $message The textual message to be logged. - * @param $priority (optional) The priority of the message. Valid - * values are: LOG_EMERG, LOG_ALERT, LOG_CRIT, - * LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, - * and LOG_DEBUG. The default is LOG_INFO. - */ - function log ($message, $priority = LOG_INFO) { - if (!$this->opened) - $this->open(); - - syslog($priority, $message); - $this->notifyAll(array('priority' => $priority, 'message' => $message)); - } - // }}} - -} - -?> + + * @version $Revision: 1.2 $ + * @since Horde 1.3 + * @package Log + */ +class Log_syslog extends Log { + + /** + * Integer holding the log facility to use. + * @var string + */ + var $_name = LOG_SYSLOG; + + + /** + * Constructs a new syslog object. + * + * @param string $name The syslog facility. + * @param string $ident The identity string. + * @param array $conf The configuration array. + * @param int $maxLevel Maximum level at which to log. + * @access public + */ + function Log_syslog($name, $ident = '', $conf = array(), + $maxLevel = PEAR_LOG_DEBUG) + { + /* Ensure we have a valid integer value for $name. */ + if (empty($name) || !is_int($name)) { + $name = LOG_SYSLOG; + } + + $this->_name = $name; + $this->_ident = $ident; + $this->_maxLevel = $maxLevel; + } + + /** + * Opens a connection to the system logger, if it has not already + * been opened. This is implicitly called by log(), if necessary. + * @access public + */ + function open() + { + if (!$this->_opened) { + openlog($this->_ident, LOG_PID, $this->_name); + $this->_opened = true; + } + } + + /** + * Closes the connection to the system logger, if it is open. + * @access public + */ + function close() + { + if ($this->_opened) { + closelog(); + $this->_opened = false; + } + } + + /** + * Sends $message to the currently open syslog connection. Calls + * open() if necessary. Also passes the message along to any Log_observer + * instances that are observing this Log. + * + * @param string $message The textual message to be logged. + * @param int $priority (optional) The priority of the message. Valid + * values are: PEAR_LOG_EMERG, PEAR_LOG_ALERT, + * PEAR_LOG_CRIT, PEAR_LOG_ERR, PEAR_LOG_WARNING, + * PEAR_LOG_NOTICE, PEAR_LOG_INFO, and PEAR_LOG_DEBUG. + * The default is PEAR_LOG_INFO. + * @return boolean True on success or false on failure. + * @access public + */ + function log($message, $priority = PEAR_LOG_INFO) + { + /* Abort early if the priority is above the maximum logging level. */ + if ($priority > $this->_maxLevel) { + return false; + } + + if (!$this->_opened) { + $this->open(); + } + + if (!syslog($this->_toSyslog($priority), $message)) { + return false; + } + + $this->notifyAll(array('priority' => $priority, 'message' => $message)); + + return true; + } + + /** + * Converts a PEAR_LOG_* constant into a syslog LOG_* constant. + * + * This function exists because, under Windows, not all of the LOG_* + * constants have unique values. Instead, the PEAR_LOG_* were introduced + * for global use, with the conversion to the LOG_* constants kept local to + * to the syslog driver. + * + * @param int $priority PEAR_LOG_* value to convert to LOG_* value. + * + * @return The LOG_* representation of $priority. + * + * @access private + */ + function _toSyslog($priority) + { + static $priorities = array( + PEAR_LOG_EMERG => LOG_EMERG, + PEAR_LOG_ALERT => LOG_ALERT, + PEAR_LOG_CRIT => LOG_CRIT, + PEAR_LOG_ERR => LOG_ERR, + PEAR_LOG_WARNING => LOG_WARNING, + PEAR_LOG_NOTICE => LOG_NOTICE, + PEAR_LOG_INFO => LOG_INFO, + PEAR_LOG_DEBUG => LOG_DEBUG + ); + + return $priorities[$priority]; + } + +} +?>