1: <?php
2: /**
3: * Registry of loaded log engines
4: *
5: * PHP 5
6: *
7: * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
8: * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
9: *
10: * Licensed under The MIT License
11: * For full copyright and license information, please see the LICENSE.txt
12: * Redistributions of files must retain the above copyright notice.
13: *
14: * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
15: * @link http://cakephp.org CakePHP(tm) Project
16: * @package Cake.Log
17: * @since CakePHP(tm) v 2.2
18: * @license http://www.opensource.org/licenses/mit-license.php MIT License
19: */
20:
21: App::uses('ObjectCollection', 'Utility');
22:
23: /**
24: * Registry of loaded log engines
25: *
26: * @package Cake.Log
27: */
28: class LogEngineCollection extends ObjectCollection {
29:
30: /**
31: * Loads/constructs a Log engine.
32: *
33: * @param string $name instance identifier
34: * @param array $options Setting for the Log Engine
35: * @return BaseLog BaseLog engine instance
36: * @throws CakeLogException when logger class does not implement a write method
37: */
38: public function load($name, $options = array()) {
39: $enable = isset($options['enabled']) ? $options['enabled'] : true;
40: $loggerName = $options['engine'];
41: unset($options['engine']);
42: $className = $this->_getLogger($loggerName);
43: $logger = new $className($options);
44: if (!$logger instanceof CakeLogInterface) {
45: throw new CakeLogException(sprintf(
46: __d('cake_dev', 'logger class %s does not implement a write method.'), $loggerName
47: ));
48: }
49: $this->_loaded[$name] = $logger;
50: if ($enable) {
51: $this->enable($name);
52: }
53: return $logger;
54: }
55:
56: /**
57: * Attempts to import a logger class from the various paths it could be on.
58: * Checks that the logger class implements a write method as well.
59: *
60: * @param string $loggerName the plugin.className of the logger class you want to build.
61: * @return mixed boolean false on any failures, string of classname to use if search was successful.
62: * @throws CakeLogException
63: */
64: protected static function _getLogger($loggerName) {
65: list($plugin, $loggerName) = pluginSplit($loggerName, true);
66:
67: App::uses($loggerName, $plugin . 'Log/Engine');
68: if (!class_exists($loggerName)) {
69: throw new CakeLogException(__d('cake_dev', 'Could not load class %s', $loggerName));
70: }
71: return $loggerName;
72: }
73:
74: }
75: