1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 2.2.0
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\Log;
16:
17: use Cake\Core\App;
18: use Cake\Core\ObjectRegistry;
19: use Psr\Log\LoggerInterface;
20: use RuntimeException;
21:
22: /**
23: * Registry of loaded log engines
24: */
25: class LogEngineRegistry extends ObjectRegistry
26: {
27:
28: /**
29: * Resolve a logger classname.
30: *
31: * Part of the template method for Cake\Core\ObjectRegistry::load()
32: *
33: * @param string $class Partial classname to resolve.
34: * @return string|false Either the correct classname or false.
35: */
36: protected function _resolveClassName($class)
37: {
38: if (is_object($class)) {
39: return $class;
40: }
41:
42: return App::className($class, 'Log/Engine', 'Log');
43: }
44:
45: /**
46: * Throws an exception when a logger is missing.
47: *
48: * Part of the template method for Cake\Core\ObjectRegistry::load()
49: *
50: * @param string $class The classname that is missing.
51: * @param string $plugin The plugin the logger is missing in.
52: * @return void
53: * @throws \RuntimeException
54: */
55: protected function _throwMissingClassError($class, $plugin)
56: {
57: throw new RuntimeException(sprintf('Could not load class %s', $class));
58: }
59:
60: /**
61: * Create the logger instance.
62: *
63: * Part of the template method for Cake\Core\ObjectRegistry::load()
64: *
65: * @param string|\Psr\Log\LoggerInterface $class The classname or object to make.
66: * @param string $alias The alias of the object.
67: * @param array $settings An array of settings to use for the logger.
68: * @return \Psr\Log\LoggerInterface The constructed logger class.
69: * @throws \RuntimeException when an object doesn't implement the correct interface.
70: */
71: protected function _create($class, $alias, $settings)
72: {
73: if (is_callable($class)) {
74: $class = $class($alias);
75: }
76:
77: if (is_object($class)) {
78: $instance = $class;
79: }
80:
81: if (!isset($instance)) {
82: $instance = new $class($settings);
83: }
84:
85: if ($instance instanceof LoggerInterface) {
86: return $instance;
87: }
88:
89: throw new RuntimeException(
90: 'Loggers must implement Psr\Log\LoggerInterface.'
91: );
92: }
93:
94: /**
95: * Remove a single logger from the registry.
96: *
97: * @param string $name The logger name.
98: * @return void
99: */
100: public function unload($name)
101: {
102: unset($this->_loaded[$name]);
103: }
104: }
105: