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: * Resolve a logger classname.
29: *
30: * Part of the template method for Cake\Core\ObjectRegistry::load()
31: *
32: * @param string $class Partial classname to resolve.
33: * @return string|false Either the correct classname or false.
34: */
35: protected function _resolveClassName($class)
36: {
37: if (is_object($class)) {
38: return $class;
39: }
40:
41: return App::className($class, 'Log/Engine', 'Log');
42: }
43:
44: /**
45: * Throws an exception when a logger is missing.
46: *
47: * Part of the template method for Cake\Core\ObjectRegistry::load()
48: *
49: * @param string $class The classname that is missing.
50: * @param string $plugin The plugin the logger is missing in.
51: * @return void
52: * @throws \RuntimeException
53: */
54: protected function _throwMissingClassError($class, $plugin)
55: {
56: throw new RuntimeException(sprintf('Could not load class %s', $class));
57: }
58:
59: /**
60: * Create the logger instance.
61: *
62: * Part of the template method for Cake\Core\ObjectRegistry::load()
63: *
64: * @param string|\Psr\Log\LoggerInterface $class The classname or object to make.
65: * @param string $alias The alias of the object.
66: * @param array $settings An array of settings to use for the logger.
67: * @return \Psr\Log\LoggerInterface The constructed logger class.
68: * @throws \RuntimeException when an object doesn't implement the correct interface.
69: */
70: protected function _create($class, $alias, $settings)
71: {
72: if (is_callable($class)) {
73: $class = $class($alias);
74: }
75:
76: if (is_object($class)) {
77: $instance = $class;
78: }
79:
80: if (!isset($instance)) {
81: $instance = new $class($settings);
82: }
83:
84: if ($instance instanceof LoggerInterface) {
85: return $instance;
86: }
87:
88: throw new RuntimeException(
89: 'Loggers must implement Psr\Log\LoggerInterface.'
90: );
91: }
92:
93: /**
94: * Remove a single logger from the registry.
95: *
96: * @param string $name The logger name.
97: * @return void
98: */
99: public function unload($name)
100: {
101: unset($this->_loaded[$name]);
102: }
103: }
104: