* @link http://www.yiiframework.com/ * @copyright 2008-2013 Yii Software LLC * @license http://www.yiiframework.com/license/ */ /** * CLogRouter manages log routes that record log messages in different media. * * For example, a file log route {@link CFileLogRoute} records log messages * in log files. An email log route {@link CEmailLogRoute} sends log messages * to specific email addresses. See {@link CLogRoute} for more details about * different log routes. * * Log routes may be configured in application configuration like following: *
 * array(
 *     'preload'=>array('log'), // preload log component when app starts
 *     'components'=>array(
 *         'log'=>array(
 *             'class'=>'CLogRouter',
 *             'routes'=>array(
 *                 array(
 *                     'class'=>'CFileLogRoute',
 *                     'levels'=>'trace, info',
 *                     'categories'=>'system.*',
 *                 ),
 *                 array(
 *                     'class'=>'CEmailLogRoute',
 *                     'levels'=>'error, warning',
 *                     'emails'=>array('admin@example.com'),
 *                 ),
 *             ),
 *         ),
 *     ),
 * )
 * 
* * You can specify multiple routes with different filtering conditions and different * targets, even if the routes are of the same type. * * @property array $routes The currently initialized routes. * * @author Qiang Xue * @package system.logging * @since 1.0 */ class CLogRouter extends CApplicationComponent { private $_routes=array(); /** * Initializes this application component. * This method is required by the IApplicationComponent interface. */ public function init() { parent::init(); foreach($this->_routes as $name=>$route) { $route=Yii::createComponent($route); $route->init(); $this->_routes[$name]=$route; } Yii::getLogger()->attachEventHandler('onFlush',array($this,'collectLogs')); Yii::app()->attachEventHandler('onEndRequest',array($this,'processLogs')); } /** * @return array the currently initialized routes */ public function getRoutes() { return new CMap($this->_routes); } /** * @param array $config list of route configurations. Each array element represents * the configuration for a single route and has the following array structure: * */ public function setRoutes($config) { foreach($config as $name=>$route) $this->_routes[$name]=$route; } /** * Collects log messages from a logger. * This method is an event handler to the {@link CLogger::onFlush} event. * @param CEvent $event event parameter */ public function collectLogs($event) { $logger=Yii::getLogger(); $dumpLogs=isset($event->params['dumpLogs']) && $event->params['dumpLogs']; foreach($this->_routes as $route) { /* @var $route CLogRoute */ if($route->enabled) $route->collectLogs($logger,$dumpLogs); } } /** * Collects and processes log messages from a logger. * This method is an event handler to the {@link CApplication::onEndRequest} event. * @since 1.1.0 */ public function processLogs() { $logger=Yii::getLogger(); $logger->flush(true); } }