123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- /**
- * CLogRoute class file.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.yiiframework.com/
- * @copyright 2008-2013 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
- /**
- * CLogRoute is the base class for all log route classes.
- *
- * A log route object retrieves log messages from a logger and sends it
- * somewhere, such as files, emails.
- * The messages being retrieved may be filtered first before being sent
- * to the destination. The filters include log level filter and log category filter.
- *
- * To specify level filter, set {@link levels} property,
- * which takes a string of comma-separated desired level names (e.g. 'Error, Debug').
- * To specify category filter, set {@link categories} property,
- * which takes a string of comma-separated desired category names (e.g. 'System.Web, System.IO').
- *
- * Level filter and category filter are combinational, i.e., only messages
- * satisfying both filter conditions will they be returned.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @package system.logging
- * @since 1.0
- */
- abstract class CLogRoute extends CComponent
- {
- /**
- * @var boolean whether to enable this log route. Defaults to true.
- */
- public $enabled=true;
- /**
- * @var string list of levels separated by comma or space. Defaults to empty, meaning all levels.
- */
- public $levels='';
- /**
- * @var mixed array of categories, or string list separated by comma or space.
- * Defaults to empty array, meaning all categories.
- */
- public $categories=array();
- /**
- * @var mixed array of categories, or string list separated by comma or space, to EXCLUDE from logs.
- * Defaults to empty array, meaning no categories are excluded.
- * This will exclude any categories after $categories has been ran.
- */
- public $except=array();
- /**
- * @var mixed the additional filter (eg {@link CLogFilter}) that can be applied to the log messages.
- * The value of this property will be passed to {@link Yii::createComponent} to create
- * a log filter object. As a result, this can be either a string representing the
- * filter class name or an array representing the filter configuration.
- * In general, the log filter class should implement {@link ILogFilter} interface.
- * If you want to apply multiple filters you can use {@link CChainedLogFilter} to do so.
- * Defaults to null, meaning no filter will be used.
- */
- public $filter;
- /**
- * @var array the logs that are collected so far by this log route.
- * @since 1.1.0
- */
- public $logs=array();
- /**
- * Initializes the route.
- * This method is invoked after the route is created by the route manager.
- */
- public function init()
- {
- }
- /**
- * Formats a log message given different fields.
- * @param string $message message content
- * @param integer $level message level
- * @param string $category message category
- * @param integer $time timestamp
- * @return string formatted message
- */
- protected function formatLogMessage($message,$level,$category,$time)
- {
- return @date('Y/m/d H:i:s',$time)." [$level] [$category] $message\n";
- }
- /**
- * Retrieves filtered log messages from logger for further processing.
- * @param CLogger $logger logger instance
- * @param boolean $processLogs whether to process the logs after they are collected from the logger
- */
- public function collectLogs($logger, $processLogs=false)
- {
- $logs=$logger->getLogs($this->levels,$this->categories,$this->except);
- $this->logs=empty($this->logs) ? $logs : array_merge($this->logs,$logs);
- if($processLogs && !empty($this->logs))
- {
- if($this->filter!==null)
- Yii::createComponent($this->filter)->filter($this->logs);
- if($this->logs!==array())
- $this->processLogs($this->logs);
- $this->logs=array();
- }
- }
- /**
- * Processes log messages and sends them to specific destination.
- * Derived child classes must implement this method.
- * @param array $logs list of messages. Each array element represents one message
- * with the following structure:
- * array(
- * [0] => message (string)
- * [1] => level (string)
- * [2] => category (string)
- * [3] => timestamp (float, obtained by microtime(true));
- */
- abstract protected function processLogs($logs);
- }
|