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