diff --git a/src/Monolog/Handler/AbstractHandler.php b/src/Monolog/Handler/AbstractHandler.php index f5a7f5fb..ef6015e2 100644 --- a/src/Monolog/Handler/AbstractHandler.php +++ b/src/Monolog/Handler/AbstractHandler.php @@ -36,7 +36,7 @@ abstract class AbstractHandler extends Handler /** * {@inheritdoc} */ - public function isHandling(array $record) + public function isHandling(array $record): bool { return $record['level'] >= $this->level; } @@ -47,7 +47,7 @@ abstract class AbstractHandler extends Handler * @param int|string $level Level or level name * @return self */ - public function setLevel($level) + public function setLevel($level): self { $this->level = Logger::toMonologLevel($level); @@ -59,7 +59,7 @@ abstract class AbstractHandler extends Handler * * @return int */ - public function getLevel() + public function getLevel(): int { return $this->level; } @@ -71,7 +71,7 @@ abstract class AbstractHandler extends Handler * false means that bubbling is not permitted. * @return self */ - public function setBubble($bubble) + public function setBubble(bool $bubble): self { $this->bubble = $bubble; @@ -84,7 +84,7 @@ abstract class AbstractHandler extends Handler * @return Boolean true means that this handler allows bubbling. * false means that bubbling is not permitted. */ - public function getBubble() + public function getBubble(): bool { return $this->bubble; } diff --git a/src/Monolog/Handler/AbstractProcessingHandler.php b/src/Monolog/Handler/AbstractProcessingHandler.php index 05ff3a88..49a92483 100644 --- a/src/Monolog/Handler/AbstractProcessingHandler.php +++ b/src/Monolog/Handler/AbstractProcessingHandler.php @@ -27,7 +27,7 @@ abstract class AbstractProcessingHandler extends AbstractHandler implements Proc /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; diff --git a/src/Monolog/Handler/BufferHandler.php b/src/Monolog/Handler/BufferHandler.php index 350a7622..b9024e29 100644 --- a/src/Monolog/Handler/BufferHandler.php +++ b/src/Monolog/Handler/BufferHandler.php @@ -50,7 +50,7 @@ class BufferHandler extends AbstractHandler implements ProcessableHandlerInterfa /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if ($record['level'] < $this->level) { return false; diff --git a/src/Monolog/Handler/FilterHandler.php b/src/Monolog/Handler/FilterHandler.php index cd7a0f84..7c5b9508 100644 --- a/src/Monolog/Handler/FilterHandler.php +++ b/src/Monolog/Handler/FilterHandler.php @@ -66,7 +66,7 @@ class FilterHandler extends Handler implements ProcessableHandlerInterface /** * @return array */ - public function getAcceptedLevels() + public function getAcceptedLevels(): array { return array_flip($this->acceptedLevels); } @@ -92,7 +92,7 @@ class FilterHandler extends Handler implements ProcessableHandlerInterface /** * {@inheritdoc} */ - public function isHandling(array $record) + public function isHandling(array $record): bool { return isset($this->acceptedLevels[$record['level']]); } @@ -100,7 +100,7 @@ class FilterHandler extends Handler implements ProcessableHandlerInterface /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; diff --git a/src/Monolog/Handler/FingersCrossedHandler.php b/src/Monolog/Handler/FingersCrossedHandler.php index 22ae0457..d1c246be 100644 --- a/src/Monolog/Handler/FingersCrossedHandler.php +++ b/src/Monolog/Handler/FingersCrossedHandler.php @@ -76,7 +76,7 @@ class FingersCrossedHandler extends Handler implements ProcessableHandlerInterfa /** * {@inheritdoc} */ - public function isHandling(array $record) + public function isHandling(array $record): bool { return true; } @@ -84,7 +84,7 @@ class FingersCrossedHandler extends Handler implements ProcessableHandlerInterfa /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if ($this->processors) { $record = $this->processRecord($record); diff --git a/src/Monolog/Handler/GroupHandler.php b/src/Monolog/Handler/GroupHandler.php index f06f069f..282bfcf0 100644 --- a/src/Monolog/Handler/GroupHandler.php +++ b/src/Monolog/Handler/GroupHandler.php @@ -41,7 +41,7 @@ class GroupHandler extends Handler implements ProcessableHandlerInterface /** * {@inheritdoc} */ - public function isHandling(array $record) + public function isHandling(array $record): bool { foreach ($this->handlers as $handler) { if ($handler->isHandling($record)) { @@ -55,7 +55,7 @@ class GroupHandler extends Handler implements ProcessableHandlerInterface /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if ($this->processors) { $record = $this->processRecord($record); diff --git a/src/Monolog/Handler/HandlerInterface.php b/src/Monolog/Handler/HandlerInterface.php index a19846ca..c0df7c97 100644 --- a/src/Monolog/Handler/HandlerInterface.php +++ b/src/Monolog/Handler/HandlerInterface.php @@ -31,7 +31,7 @@ interface HandlerInterface * * @return Boolean */ - public function isHandling(array $record); + public function isHandling(array $record): bool; /** * Handles a record. @@ -47,7 +47,7 @@ interface HandlerInterface * @return Boolean true means that this handler handled the record, and that bubbling is not permitted. * false means the record was either not processed or that this handler allows bubbling. */ - public function handle(array $record); + public function handle(array $record): bool; /** * Handles a set of records at once. diff --git a/src/Monolog/Handler/NullHandler.php b/src/Monolog/Handler/NullHandler.php index 755ef698..3179d394 100644 --- a/src/Monolog/Handler/NullHandler.php +++ b/src/Monolog/Handler/NullHandler.php @@ -36,7 +36,7 @@ class NullHandler extends Handler /** * {@inheritdoc} */ - public function isHandling(array $record) + public function isHandling(array $record): bool { return $record['level'] >= $this->level; } @@ -44,7 +44,7 @@ class NullHandler extends Handler /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if ($record['level'] < $this->level) { return false; diff --git a/src/Monolog/Handler/PHPConsoleHandler.php b/src/Monolog/Handler/PHPConsoleHandler.php index fe7722aa..84b5a8b6 100644 --- a/src/Monolog/Handler/PHPConsoleHandler.php +++ b/src/Monolog/Handler/PHPConsoleHandler.php @@ -157,7 +157,7 @@ class PHPConsoleHandler extends AbstractProcessingHandler return $this->options; } - public function handle(array $record) + public function handle(array $record): bool { if ($this->options['enabled'] && $this->connector->isActiveClient()) { return parent::handle($record); diff --git a/src/Monolog/Handler/PsrHandler.php b/src/Monolog/Handler/PsrHandler.php index 1ae85845..2d613021 100644 --- a/src/Monolog/Handler/PsrHandler.php +++ b/src/Monolog/Handler/PsrHandler.php @@ -43,7 +43,7 @@ class PsrHandler extends AbstractHandler /** * {@inheritDoc} */ - public function handle(array $record) + public function handle(array $record): bool { if (!$this->isHandling($record)) { return false; diff --git a/src/Monolog/Handler/SamplingHandler.php b/src/Monolog/Handler/SamplingHandler.php index 5e0a75e7..a0b784b2 100644 --- a/src/Monolog/Handler/SamplingHandler.php +++ b/src/Monolog/Handler/SamplingHandler.php @@ -54,12 +54,12 @@ class SamplingHandler extends AbstractHandler implements ProcessableHandlerInter } } - public function isHandling(array $record) + public function isHandling(array $record): bool { return $this->handler->isHandling($record); } - public function handle(array $record) + public function handle(array $record): bool { if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) { // The same logic as in FingersCrossedHandler diff --git a/src/Monolog/Handler/WhatFailureGroupHandler.php b/src/Monolog/Handler/WhatFailureGroupHandler.php index 05a88173..e5533a6e 100644 --- a/src/Monolog/Handler/WhatFailureGroupHandler.php +++ b/src/Monolog/Handler/WhatFailureGroupHandler.php @@ -22,7 +22,7 @@ class WhatFailureGroupHandler extends GroupHandler /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { if ($this->processors) { foreach ($this->processors as $processor) { diff --git a/src/Monolog/Logger.php b/src/Monolog/Logger.php index 28a63d42..819c83cf 100644 --- a/src/Monolog/Logger.php +++ b/src/Monolog/Logger.php @@ -1,4 +1,5 @@ 'DEBUG', self::INFO => 'INFO', self::NOTICE => 'NOTICE', @@ -100,7 +102,7 @@ class Logger implements LoggerInterface self::CRITICAL => 'CRITICAL', self::ALERT => 'ALERT', self::EMERGENCY => 'EMERGENCY', - ); + ]; /** * @var string @@ -129,7 +131,7 @@ class Logger implements LoggerInterface protected $microsecondTimestamps = true; /** - * @var \DateTimeZone + * @var DateTimeZone */ protected $timezone; @@ -139,18 +141,18 @@ class Logger implements LoggerInterface * @param callable[] $processors Optional array of processors * @param DateTimeZone $timezone Optional timezone, if not provided date_default_timezone_get() will be used */ - public function __construct($name, array $handlers = array(), array $processors = array(), $timezone = null) + public function __construct(string $name, array $handlers = array(), array $processors = array(), DateTimeZone $timezone = null) { $this->name = $name; $this->handlers = $handlers; $this->processors = $processors; - $this->timezone = new \DateTimeZone($timezone ?: date_default_timezone_get() ?: 'UTC'); + $this->timezone = new DateTimeZone($timezone ?: date_default_timezone_get() ?: 'UTC'); } /** * @return string */ - public function getName() + public function getName(): string { return $this->name; } @@ -161,7 +163,7 @@ class Logger implements LoggerInterface * @param HandlerInterface $handler * @return $this */ - public function pushHandler(HandlerInterface $handler) + public function pushHandler(HandlerInterface $handler): self { array_unshift($this->handlers, $handler); @@ -173,7 +175,7 @@ class Logger implements LoggerInterface * * @return HandlerInterface */ - public function popHandler() + public function popHandler(): HandlerInterface { if (!$this->handlers) { throw new \LogicException('You tried to pop from an empty handler stack.'); @@ -190,7 +192,7 @@ class Logger implements LoggerInterface * @param HandlerInterface[] $handlers * @return $this */ - public function setHandlers(array $handlers) + public function setHandlers(array $handlers): self { $this->handlers = array(); foreach (array_reverse($handlers) as $handler) { @@ -203,7 +205,7 @@ class Logger implements LoggerInterface /** * @return HandlerInterface[] */ - public function getHandlers() + public function getHandlers(): array { return $this->handlers; } @@ -214,11 +216,8 @@ class Logger implements LoggerInterface * @param callable $callback * @return $this */ - public function pushProcessor($callback) + public function pushProcessor(callable $callback): self { - if (!is_callable($callback)) { - throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given'); - } array_unshift($this->processors, $callback); return $this; @@ -229,7 +228,7 @@ class Logger implements LoggerInterface * * @return callable */ - public function popProcessor() + public function popProcessor(): callable { if (!$this->processors) { throw new \LogicException('You tried to pop from an empty processor stack.'); @@ -241,7 +240,7 @@ class Logger implements LoggerInterface /** * @return callable[] */ - public function getProcessors() + public function getProcessors(): array { return $this->processors; } @@ -259,9 +258,9 @@ class Logger implements LoggerInterface * * @param bool $micro True to use microtime() to create timestamps */ - public function useMicrosecondTimestamps($micro) + public function useMicrosecondTimestamps(bool $micro) { - $this->microsecondTimestamps = (bool) $micro; + $this->microsecondTimestamps = $micro; } /** @@ -272,7 +271,7 @@ class Logger implements LoggerInterface * @param array $context The log context * @return Boolean Whether the record has been processed */ - public function addRecord($level, $message, array $context = array()) + public function addRecord(int $level, string $message, array $context = array()): bool { $levelName = static::getLevelName($level); @@ -295,12 +294,12 @@ class Logger implements LoggerInterface if ($this->microsecondTimestamps) { $ts = \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), $this->timezone); } else { - $ts = new \DateTime(null, $this->timezone); + $ts = new \DateTime('', $this->timezone); } $ts->setTimezone($this->timezone); $record = array( - 'message' => (string) $message, + 'message' => $message, 'context' => $context, 'level' => $level, 'level_name' => $levelName, @@ -329,7 +328,7 @@ class Logger implements LoggerInterface * * @return array Assoc array with human-readable level names => level codes. */ - public static function getLevels() + public static function getLevels(): array { return array_flip(static::$levels); } @@ -340,7 +339,7 @@ class Logger implements LoggerInterface * @param int $level * @return string */ - public static function getLevelName($level) + public static function getLevelName(int $level): string { if (!isset(static::$levels[$level])) { throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels))); @@ -355,10 +354,14 @@ class Logger implements LoggerInterface * @param string|int Level number (monolog) or name (PSR-3) * @return int */ - public static function toMonologLevel($level) + public static function toMonologLevel($level): int { - if (is_string($level) && defined(__CLASS__.'::'.strtoupper($level))) { - return constant(__CLASS__.'::'.strtoupper($level)); + if (is_string($level)) { + if (defined(__CLASS__.'::'.strtoupper($level))) { + return constant(__CLASS__.'::'.strtoupper($level)); + } + + throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels))); } return $level; @@ -370,7 +373,7 @@ class Logger implements LoggerInterface * @param int $level * @return Boolean */ - public function isHandling($level) + public function isHandling(int $level): bool { $record = array( 'level' => $level, @@ -399,7 +402,7 @@ class Logger implements LoggerInterface { $level = static::toMonologLevel($level); - return $this->addRecord($level, $message, $context); + return $this->addRecord($level, (string) $message, $context); } /** @@ -413,7 +416,7 @@ class Logger implements LoggerInterface */ public function debug($message, array $context = array()) { - return $this->addRecord(static::DEBUG, $message, $context); + return $this->addRecord(static::DEBUG, (string) $message, $context); } /** @@ -427,7 +430,7 @@ class Logger implements LoggerInterface */ public function info($message, array $context = array()) { - return $this->addRecord(static::INFO, $message, $context); + return $this->addRecord(static::INFO, (string) $message, $context); } /** @@ -441,7 +444,7 @@ class Logger implements LoggerInterface */ public function notice($message, array $context = array()) { - return $this->addRecord(static::NOTICE, $message, $context); + return $this->addRecord(static::NOTICE, (string) $message, $context); } /** @@ -455,7 +458,7 @@ class Logger implements LoggerInterface */ public function warning($message, array $context = array()) { - return $this->addRecord(static::WARNING, $message, $context); + return $this->addRecord(static::WARNING, (string) $message, $context); } /** @@ -469,7 +472,7 @@ class Logger implements LoggerInterface */ public function error($message, array $context = array()) { - return $this->addRecord(static::ERROR, $message, $context); + return $this->addRecord(static::ERROR, (string) $message, $context); } /** @@ -483,7 +486,7 @@ class Logger implements LoggerInterface */ public function critical($message, array $context = array()) { - return $this->addRecord(static::CRITICAL, $message, $context); + return $this->addRecord(static::CRITICAL, (string) $message, $context); } /** @@ -497,7 +500,7 @@ class Logger implements LoggerInterface */ public function alert($message, array $context = array()) { - return $this->addRecord(static::ALERT, $message, $context); + return $this->addRecord(static::ALERT, (string) $message, $context); } /** @@ -511,15 +514,15 @@ class Logger implements LoggerInterface */ public function emergency($message, array $context = array()) { - return $this->addRecord(static::EMERGENCY, $message, $context); + return $this->addRecord(static::EMERGENCY, (string) $message, $context); } /** * Set the timezone to be used for the timestamp of log records. * - * @param \DateTimeZone $tz Timezone object + * @param DateTimeZone $tz Timezone object */ - public function setTimezone(\DateTimeZone $tz) + public function setTimezone(DateTimeZone $tz) { $this->timezone = $tz; } @@ -527,9 +530,9 @@ class Logger implements LoggerInterface /** * Set the timezone to be used for the timestamp of log records. * - * @return \DateTimeZone + * @return DateTimeZone */ - public function getTimezone() + public function getTimezone(): DateTimeZone { return $this->timezone; } diff --git a/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php b/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php index 8d37a1fc..ed44d3b1 100644 --- a/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php +++ b/tests/Monolog/Handler/WhatFailureGroupHandlerTest.php @@ -112,7 +112,7 @@ class ExceptionTestHandler extends TestHandler /** * {@inheritdoc} */ - public function handle(array $record) + public function handle(array $record): bool { parent::handle($record); diff --git a/tests/Monolog/LoggerTest.php b/tests/Monolog/LoggerTest.php index cef2ea89..c2f049de 100644 --- a/tests/Monolog/LoggerTest.php +++ b/tests/Monolog/LoggerTest.php @@ -182,17 +182,6 @@ class LoggerTest extends \PHPUnit_Framework_TestCase $logger->popProcessor(); } - /** - * @covers Monolog\Logger::pushProcessor - * @expectedException InvalidArgumentException - */ - public function testPushProcessorWithNonCallable() - { - $logger = new Logger(__METHOD__); - - $logger->pushProcessor(new \stdClass()); - } - /** * @covers Monolog\Logger::addRecord */