123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- <?php
- /**
- * CLogRouter 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/
- */
- /**
- * 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:
- * <pre>
- * 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'),
- * ),
- * ),
- * ),
- * ),
- * )
- * </pre>
- *
- * 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 <qiang.xue@gmail.com>
- * @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:
- * <ul>
- * <li>class: specifies the class name or alias for the route class.</li>
- * <li>name-value pairs: configure the initial property values of the route.</li>
- * </ul>
- */
- 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);
- }
- }
|