Monolog   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 15
eloc 24
c 2
b 0
f 0
dl 0
loc 76
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
B getLogLevel() 0 15 9
A log() 0 19 5
1
<?php
2
3
/**
4
 * @license LGPLv3, http://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2014-2025
6
 * @package MW
7
 * @subpackage Logger
8
 */
9
10
11
namespace Aimeos\Base\Logger;
12
13
14
/**
15
 * Log messages using Monolog.
16
 *
17
 * @package MW
18
 * @subpackage Logger
19
 */
20
class Monolog implements Iface
21
{
22
	use Traits;
23
24
25
	private \Monolog\Logger $logger;
26
	private ?array $facilities;
27
28
29
	/**
30
	 * Initializes the logger object.
31
	 *
32
	 * @param \Monolog\Logger $logger Monolog logger object
33
	 * @param array|null $facilities Facilities for which messages should be logged
34
	 */
35
	public function __construct( \Monolog\Logger $logger, ?array $facilities = null )
36
	{
37
		$this->logger = $logger;
38
		$this->facilities = $facilities;
39
	}
40
41
42
	/**
43
	 * Writes a message to the configured log facility.
44
	 *
45
	 * @param string|array|object $message Message text that should be written to the log facility
46
	 * @param int $priority Priority of the message for filtering
47
	 * @param string $facility Facility for logging different types of messages (e.g. message, auth, user, changelog)
48
	 * @return \Aimeos\Base\Logger\Iface Logger object for method chaining
49
	 * @throws \Aimeos\Base\Logger\Exception If an error occurs
50
	 * @see \Aimeos\Base\Logger\Iface for available log level constants
51
	 */
52
	public function log( $message, int $priority = Iface::ERR, string $facility = 'message' ) : Iface
53
	{
54
		try
55
		{
56
			if( $this->facilities === null || in_array( $facility, $this->facilities ) )
57
			{
58
				if( !is_scalar( $message ) ) {
59
					$message = json_encode( $message );
60
				}
61
62
				$this->logger->log( $this->getLogLevel( $priority ), $message );
63
			}
64
		}
65
		catch( \Exception $e )
66
		{
67
			throw new Exception( $e->getMessage(), $e->getCode(), $e );
68
		}
69
70
		return $this;
71
	}
72
73
74
	/**
75
	 * Checks if the given log constant is valid
76
	 *
77
	 * @param int $level Log constant
78
	 * @return mixed Log level
79
	 * @throws \Aimeos\Base\Logger\Exception If log constant is unknown
80
	 */
81
	protected function getLogLevel( int $level )
82
	{
83
		switch( $level )
84
		{
85
			case \Aimeos\Base\Logger\Iface::EMERG: return \Monolog\Logger::EMERGENCY;
86
			case \Aimeos\Base\Logger\Iface::ALERT: return \Monolog\Logger::ALERT;
87
			case \Aimeos\Base\Logger\Iface::CRIT: return \Monolog\Logger::CRITICAL;
88
			case \Aimeos\Base\Logger\Iface::ERR: return \Monolog\Logger::ERROR;
89
			case \Aimeos\Base\Logger\Iface::WARN: return \Monolog\Logger::WARNING;
90
			case \Aimeos\Base\Logger\Iface::NOTICE: return \Monolog\Logger::NOTICE;
91
			case \Aimeos\Base\Logger\Iface::INFO: return \Monolog\Logger::INFO;
92
			case \Aimeos\Base\Logger\Iface::DEBUG: return \Monolog\Logger::DEBUG;
93
		}
94
95
		throw new \Aimeos\Base\Logger\Exception( 'Invalid log level' );
96
	}
97
}
98