232 lines
6.2 KiB
PHP
232 lines
6.2 KiB
PHP
<?php
|
|
/**
|
|
* $Header$
|
|
* $Horde: horde/lib/Log/composite.php,v 1.2 2000/06/28 21:36:13 jon Exp $
|
|
*
|
|
* @version $Revision: 215528 $
|
|
* @package Log
|
|
*/
|
|
|
|
/**
|
|
* The Log_composite:: class implements a Composite pattern which
|
|
* allows multiple Log implementations to receive the same events.
|
|
*
|
|
* @author Chuck Hagenbuch <chuck@horde.org>
|
|
* @author Jon Parise <jon@php.net>
|
|
*
|
|
* @since Horde 1.3
|
|
* @since Log 1.0
|
|
* @package Log
|
|
*
|
|
* @example composite.php Using the composite handler.
|
|
*/
|
|
class Log_composite extends Log
|
|
{
|
|
/**
|
|
* Array holding all of the Log instances to which log events should be
|
|
* sent.
|
|
*
|
|
* @var array
|
|
* @access private
|
|
*/
|
|
var $_children = array();
|
|
|
|
|
|
/**
|
|
* Constructs a new composite Log object.
|
|
*
|
|
* @param boolean $name This parameter is ignored.
|
|
* @param boolean $ident This parameter is ignored.
|
|
* @param boolean $conf This parameter is ignored.
|
|
* @param boolean $level This parameter is ignored.
|
|
*
|
|
* @access public
|
|
*/
|
|
function __construct($name, $ident = '', $conf = array(),
|
|
$level = PEAR_LOG_DEBUG)
|
|
{
|
|
$this->_ident = $ident;
|
|
}
|
|
|
|
/**
|
|
* Opens all of the child instances.
|
|
*
|
|
* @return True if all of the child instances were successfully opened.
|
|
*
|
|
* @access public
|
|
*/
|
|
function open()
|
|
{
|
|
/* Attempt to open each of our children. */
|
|
$this->_opened = true;
|
|
foreach ($this->_children as $id => $child) {
|
|
$this->_opened &= $this->_children[$id]->open();
|
|
}
|
|
|
|
/* If all children were opened, return success. */
|
|
return $this->_opened;
|
|
}
|
|
|
|
/**
|
|
* Closes all of the child instances.
|
|
*
|
|
* @return True if all of the child instances were successfully closed.
|
|
*
|
|
* @access public
|
|
*/
|
|
function close()
|
|
{
|
|
/* Attempt to close each of our children. */
|
|
$closed = true;
|
|
foreach ($this->_children as $id => $child) {
|
|
$closed &= $this->_children[$id]->close();
|
|
}
|
|
|
|
/* Track the _opened state for consistency. */
|
|
$this->_opened = false;
|
|
|
|
/* If all children were closed, return success. */
|
|
return $closed;
|
|
}
|
|
|
|
/**
|
|
* Flushes all child instances. It is assumed that all of the children
|
|
* have been successfully opened.
|
|
*
|
|
* @return True if all of the child instances were successfully flushed.
|
|
*
|
|
* @access public
|
|
* @since Log 1.8.2
|
|
*/
|
|
function flush()
|
|
{
|
|
/* Attempt to flush each of our children. */
|
|
$flushed = true;
|
|
foreach ($this->_children as $id => $child) {
|
|
$flushed &= $this->_children[$id]->flush();
|
|
}
|
|
|
|
/* If all children were flushed, return success. */
|
|
return $flushed;
|
|
}
|
|
|
|
/**
|
|
* Sends $message and $priority to each child of this composite. If the
|
|
* children aren't already open, they will be opened here.
|
|
*
|
|
* @param mixed $message String or object containing the message
|
|
* to log.
|
|
* @param string $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.
|
|
*
|
|
* @return boolean True if the entry is successfully logged.
|
|
*
|
|
* @access public
|
|
*/
|
|
function log($message, $priority = null)
|
|
{
|
|
/* If a priority hasn't been specified, use the default value. */
|
|
if ($priority === null) {
|
|
$priority = $this->_priority;
|
|
}
|
|
|
|
/*
|
|
* If the handlers haven't been opened, attempt to open them now.
|
|
* However, we don't treat failure to open all of the handlers as a
|
|
* fatal error. We defer that consideration to the success of calling
|
|
* each handler's log() method below.
|
|
*/
|
|
if (!$this->_opened) {
|
|
$this->open();
|
|
}
|
|
|
|
/* Attempt to log the event using each of the children. */
|
|
$success = true;
|
|
foreach ($this->_children as $id => $child) {
|
|
$success &= $this->_children[$id]->log($message, $priority);
|
|
}
|
|
|
|
$this->_announce(array('priority' => $priority, 'message' => $message));
|
|
|
|
/* Return success if all of the children logged the event. */
|
|
return $success;
|
|
}
|
|
|
|
/**
|
|
* Returns true if this is a composite.
|
|
*
|
|
* @return boolean True if this is a composite class.
|
|
*
|
|
* @access public
|
|
*/
|
|
function isComposite()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Sets this identification string for all of this composite's children.
|
|
*
|
|
* @param string $ident The new identification string.
|
|
*
|
|
* @access public
|
|
* @since Log 1.6.7
|
|
*/
|
|
function setIdent($ident)
|
|
{
|
|
/* Call our base class's setIdent() method. */
|
|
parent::setIdent($ident);
|
|
|
|
/* ... and then call setIdent() on all of our children. */
|
|
foreach ($this->_children as $id => $child) {
|
|
$this->_children[$id]->setIdent($ident);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Adds a Log instance to the list of children.
|
|
*
|
|
* @param object $child The Log instance to add.
|
|
*
|
|
* @return boolean True if the Log instance was successfully added.
|
|
*
|
|
* @access public
|
|
*/
|
|
function addChild(&$child)
|
|
{
|
|
/* Make sure this is a Log instance. */
|
|
if (!is_a($child, 'Log')) {
|
|
return false;
|
|
}
|
|
|
|
$this->_children[$child->_id] = &$child;
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Removes a Log instance from the list of children.
|
|
*
|
|
* @param object $child The Log instance to remove.
|
|
*
|
|
* @return boolean True if the Log instance was successfully removed.
|
|
*
|
|
* @access public
|
|
*/
|
|
function removeChild($child)
|
|
{
|
|
if (!is_a($child, 'Log') || !isset($this->_children[$child->_id])) {
|
|
return false;
|
|
}
|
|
|
|
unset($this->_children[$child->_id]);
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|