Router.php 2.97 KB
Newer Older
w  
Qiang Xue committed
1 2 3
<?php
/**
 * @link http://www.yiiframework.com/
Qiang Xue committed
4
 * @copyright Copyright (c) 2008 Yii Software LLC
w  
Qiang Xue committed
5 6 7 8 9
 * @license http://www.yiiframework.com/license/
 */

namespace yii\logging;

Qiang Xue committed
10 11 12 13
use Yii;
use yii\base\Component;
use yii\base\Application;

w  
Qiang Xue committed
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
/**
 * Router manages [[Target|log targets]] that record log messages in different media.
 *
 * For example, a [[FileTarget|file log target]] records log messages
 * in files; an [[EmailTarget|email log target]] sends log messages
 * to specific email addresses. Each log target may specify filters on
 * message levels and categories to record specific messages only.
 *
 * Router and the targets it manages may be configured in application configuration,
 * like the following:
 *
 * ~~~
 * array(
 *     // preload log component when application starts
 *     'preload' => array('log'),
 *     'components' => array(
 *         'log' => array(
 *             'class' => '\yii\logging\Router',
 *             'targets' => array(
 *                 'file' => array(
 *                     'class' => '\yii\logging\FileTarget',
 *                     'levels' => 'trace, info',
 *                     'categories' => 'yii\*',
 *                 ),
 *                 'email' => array(
 *                     'class' => '\yii\logging\EmailTarget',
 *                     'levels' => 'error, warning',
 *                     'emails' => array('admin@example.com'),
 *                 ),
 *             ),
 *         ),
 *     ),
 * )
 * ~~~
 *
 * Each log target can have a name and can be referenced via the [[targets]] property
 * as follows:
 *
 * ~~~
Qiang Xue committed
53
 * Yii::$app->log->targets['file']->enabled = false;
w  
Qiang Xue committed
54 55 56 57 58
 * ~~~
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
Qiang Xue committed
59
class Router extends Component
w  
Qiang Xue committed
60
{
Qiang Xue committed
61
	/**
Qiang Xue committed
62
	 * @var Target[] list of log target objects or configurations. If the latter, target objects will
Qiang Xue committed
63
	 * be created in [[init()]] by calling [[Yii::createObject()]] with the corresponding object configuration.
Qiang Xue committed
64
	 */
Qiang Xue committed
65
	public $targets = array();
w  
Qiang Xue committed
66 67 68 69

	/**
	 * Initializes this application component.
	 * This method is invoked when the Router component is created by the application.
Qiang Xue committed
70 71
	 * The method attaches the [[processLogs]] method to both the [[Logger::EVENT_FLUSH]] event
	 * and the [[Logger::EVENT_FINAL_FLUSH]] event.
w  
Qiang Xue committed
72 73 74 75 76
	 */
	public function init()
	{
		parent::init();

Qiang Xue committed
77 78
		foreach ($this->targets as $name => $target) {
			if (!$target instanceof Target) {
Qiang Xue committed
79
				$this->targets[$name] = Yii::createObject($target);
w  
Qiang Xue committed
80 81
			}
		}
Qiang Xue committed
82
		Yii::getLogger()->router = $this;
w  
Qiang Xue committed
83 84 85
	}

	/**
Qiang Xue committed
86 87 88 89 90
	 * Dispatches log messages to [[targets]].
	 * This method is called by [[Logger]] when its [[Logger::flush()]] method is called.
	 * It will forward the messages to each log target registered in [[targets]].
	 * @param array $messages the messages to be processed
	 * @param boolean $final whether this is the final call during a request cycle
w  
Qiang Xue committed
91
	 */
Qiang Xue committed
92
	public function dispatch($messages, $final = false)
w  
Qiang Xue committed
93
	{
Qiang Xue committed
94
		foreach ($this->targets as $target) {
w  
Qiang Xue committed
95
			if ($target->enabled) {
Qiang Xue committed
96
				$target->collect($messages, $final);
w  
Qiang Xue committed
97 98 99 100
			}
		}
	}
}