Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libs/Zend/Log.php')
-rw-r--r--libs/Zend/Log.php237
1 files changed, 220 insertions, 17 deletions
diff --git a/libs/Zend/Log.php b/libs/Zend/Log.php
index 04b7ebb85a..471c0e3cf4 100644
--- a/libs/Zend/Log.php
+++ b/libs/Zend/Log.php
@@ -14,17 +14,17 @@
*
* @category Zend
* @package Zend_Log
- * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
- * @version $Id: Log.php 16207 2009-06-21 19:17:51Z thomas $
+ * @version $Id: Log.php 20893 2010-02-03 22:59:25Z yoshida@zend.co.jp $
*/
/**
* @category Zend
* @package Zend_Log
- * @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
+ * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
- * @version $Id: Log.php 16207 2009-06-21 19:17:51Z thomas $
+ * @version $Id: Log.php 20893 2010-02-03 22:59:25Z yoshida@zend.co.jp $
*/
class Zend_Log
{
@@ -59,6 +59,19 @@ class Zend_Log
protected $_extras = array();
/**
+ *
+ * @var string
+ */
+ protected $_defaultWriterNamespace = 'Zend_Log_Writer';
+
+ /**
+ *
+ * @var string
+ */
+ protected $_defaultFilterNamespace = 'Zend_Log_Filter';
+
+
+ /**
* Class constructor. Create a new logger
*
* @param Zend_Log_Writer_Abstract|null $writer default writer
@@ -74,6 +87,146 @@ class Zend_Log
}
/**
+ * Factory to construct the logger and one or more writers
+ * based on the configuration array
+ *
+ * @param array|Zend_Config Array or instance of Zend_Config
+ * @return Zend_Log
+ */
+ static public function factory($config = array())
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+ }
+
+ if (!is_array($config) || empty($config)) {
+ /** @see Zend_Log_Exception */
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception('Configuration must be an array or instance of Zend_Config');
+ }
+
+ $log = new Zend_Log;
+
+ if (!is_array(current($config))) {
+ $log->addWriter(current($config));
+ } else {
+ foreach($config as $writer) {
+ $log->addWriter($writer);
+ }
+ }
+
+ return $log;
+ }
+
+
+ /**
+ * Construct a writer object based on a configuration array
+ *
+ * @param array $spec config array with writer spec
+ * @return Zend_Log_Writer_Abstract
+ */
+ protected function _constructWriterFromConfig($config)
+ {
+ $writer = $this->_constructFromConfig('writer', $config, $this->_defaultWriterNamespace);
+
+ if (!$writer instanceof Zend_Log_Writer_Abstract) {
+ /** @see Zend_Log_Exception */
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception("{$writerName} does not extend Zend_Log_Writer_Abstract!");
+ }
+
+ if (isset($config['filterName'])) {
+ $filter = $this->_constructFilterFromConfig($config);
+ $writer->addFilter($filter);
+ }
+
+ return $writer;
+ }
+
+ /**
+ * Construct filter object from configuration array or Zend_Config object
+ *
+ * @param array|Zend_Config $config Zend_Config or Array
+ * @return Zend_Log_Filter_Interface
+ */
+ protected function _constructFilterFromConfig($config)
+ {
+ $filter = $this->_constructFromConfig('filter', $config, $this->_defaultFilterNamespace);
+
+ if (!$filter instanceof Zend_Log_Filter_Interface) {
+ /** @see Zend_Log_Exception */
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception("{$filterName} does not implement Zend_Log_Filter_Interface");
+ }
+
+ return $filter;
+ }
+
+ /**
+ * Construct a filter or writer from config
+ *
+ * @param string $type 'writer' of 'filter'
+ * @param mixed $config Zend_Config or Array
+ * @param string $namespace
+ * @return object
+ */
+ protected function _constructFromConfig($type, $config, $namespace)
+ {
+ if ($config instanceof Zend_Config) {
+ $config = $config->toArray();
+ }
+
+ if (!is_array($config) || empty($config)) {
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception(
+ 'Configuration must be an array or instance of Zend_Config'
+ );
+ }
+
+ $params = isset($config[ $type .'Params' ]) ? $config[ $type .'Params' ] : array();
+ $className = $this->getClassName($config, $type, $namespace);
+ // if (!class_exists($className)) {
+ // require_once 'Zend/Loader.php';
+ // Zend_Loader::loadClass($className);
+ // }
+
+ $reflection = new ReflectionClass($className);
+ if (!$reflection->implementsInterface('Zend_Log_FactoryInterface')) {
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception(
+ 'Driver does not implement Zend_Log_FactoryInterface and can not be constructed from config.'
+ );
+ }
+
+ return call_user_func(array($className, 'factory'), $params);
+ }
+
+ /**
+ * Get the writer or filter full classname
+ *
+ * @param array $config
+ * @param string $type filter|writer
+ * @param string $defaultNamespace
+ * @return string full classname
+ */
+ protected function getClassName($config, $type, $defaultNamespace)
+ {
+ if (!isset($config[ $type . 'Name' ])) {
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception("Specify {$type}Name in the configuration array");
+ }
+ $className = $config[ $type . 'Name' ];
+
+ $namespace = $defaultNamespace;
+ if (isset($config[ $type . 'Namespace' ])) {
+ $namespace = $config[ $type . 'Namespace' ];
+ }
+
+ $fullClassName = $namespace . '_' . $className;
+ return $fullClassName;
+ }
+
+ /**
* Class destructor. Shutdown log writers
*
* @return void
@@ -100,10 +253,24 @@ class Zend_Log
{
$priority = strtoupper($method);
if (($priority = array_search($priority, $this->_priorities)) !== false) {
- $this->log(array_shift($params), $priority);
+ switch (count($params)) {
+ case 0:
+ /** @see Zend_Log_Exception */
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception('Missing log message');
+ case 1:
+ $message = array_shift($params);
+ $extras = null;
+ break;
+ default:
+ $message = array_shift($params);
+ $extras = array_shift($params);
+ break;
+ }
+ $this->log($message, $priority, $extras);
} else {
/** @see Zend_Log_Exception */
- require_once 'Zend/Log/Exception.php';
+ // require_once 'Zend/Log/Exception.php';
throw new Zend_Log_Exception('Bad log priority');
}
}
@@ -113,21 +280,22 @@ class Zend_Log
*
* @param string $message Message to log
* @param integer $priority Priority of message
+ * @param mixed $extras Extra information to log in event
* @return void
* @throws Zend_Log_Exception
*/
- public function log($message, $priority)
+ public function log($message, $priority, $extras = null)
{
// sanity checks
if (empty($this->_writers)) {
/** @see Zend_Log_Exception */
- require_once 'Zend/Log/Exception.php';
+ // require_once 'Zend/Log/Exception.php';
throw new Zend_Log_Exception('No writers were added');
}
if (! isset($this->_priorities[$priority])) {
/** @see Zend_Log_Exception */
- require_once 'Zend/Log/Exception.php';
+ // require_once 'Zend/Log/Exception.php';
throw new Zend_Log_Exception('Bad log priority');
}
@@ -138,6 +306,25 @@ class Zend_Log
'priorityName' => $this->_priorities[$priority]),
$this->_extras);
+ // Check to see if any extra information was passed
+ if (!empty($extras)) {
+ $info = array();
+ if (is_array($extras)) {
+ foreach ($extras as $key => $value) {
+ if (is_string($key)) {
+ $event[$key] = $value;
+ } else {
+ $info[] = $value;
+ }
+ }
+ } else {
+ $info = $extras;
+ }
+ if (!empty($info)) {
+ $event['info'] = $info;
+ }
+ }
+
// abort if rejected by the global filters
foreach ($this->_filters as $filter) {
if (! $filter->accept($event)) {
@@ -166,7 +353,7 @@ class Zend_Log
if (isset($this->_priorities[$priority])
|| array_search($name, $this->_priorities)) {
/** @see Zend_Log_Exception */
- require_once 'Zend/Log/Exception.php';
+ // require_once 'Zend/Log/Exception.php';
throw new Zend_Log_Exception('Existing priorities cannot be overwritten');
}
@@ -184,12 +371,16 @@ class Zend_Log
public function addFilter($filter)
{
if (is_integer($filter)) {
- /** @see Zend_Log_Filter_Priority */
- require_once 'Zend/Log/Filter/Priority.php';
+ /** @see Zend_Log_Filter_Priority */
+ // require_once 'Zend/Log/Filter/Priority.php';
$filter = new Zend_Log_Filter_Priority($filter);
- } elseif(!is_object($filter) || ! $filter instanceof Zend_Log_Filter_Interface) {
+
+ } elseif ($filter instanceof Zend_Config || is_array($filter)) {
+ $filter = $this->_constructFilterFromConfig($filter);
+
+ } elseif(! $filter instanceof Zend_Log_Filter_Interface) {
/** @see Zend_Log_Exception */
- require_once 'Zend/Log/Exception.php';
+ // require_once 'Zend/Log/Exception.php';
throw new Zend_Log_Exception('Invalid filter provided');
}
@@ -200,11 +391,24 @@ class Zend_Log
* Add a writer. A writer is responsible for taking a log
* message and writing it out to storage.
*
- * @param Zend_Log_Writer_Abstract $writer
+ * @param mixed $writer Zend_Log_Writer_Abstract or Config array
* @return void
*/
- public function addWriter(Zend_Log_Writer_Abstract $writer)
+ public function addWriter($writer)
{
+ if (is_array($writer) || $writer instanceof Zend_Config) {
+ $writer = $this->_constructWriterFromConfig($writer);
+ }
+
+ if (!$writer instanceof Zend_Log_Writer_Abstract) {
+ /** @see Zend_Log_Exception */
+ // require_once 'Zend/Log/Exception.php';
+ throw new Zend_Log_Exception(
+ 'Writer must be an instance of Zend_Log_Writer_Abstract'
+ . ' or you should pass a configuration array'
+ );
+ }
+
$this->_writers[] = $writer;
}
@@ -218,5 +422,4 @@ class Zend_Log
public function setEventItem($name, $value) {
$this->_extras = array_merge($this->_extras, array($name => $value));
}
-
}