/** * @test */ public function constsTest() { $mask = 0; foreach (self::$constsNames as &$name) { $const = Level::class . '::' . $name; if (!\defined($const)) { $this->assertTrue(false); return; } $level = \constant($const); if (!\is_int($level)) { $this->assertTrue(false); return; } if (!BitMask::isSingleFlag($level)) { $this->assertTrue(false); return; } $foo = BitMask::addFlag($mask, $level); if ($foo === $mask) { $this->assertTrue(false); return; } $mask = $foo; } $this->assertTrue(true); }
/** * @test */ public function compositeTest() { $flag = 1; $rand = \mt_rand(0, 5); $flag = $flag << $rand; $this->assertTrue(!BitMask::isSingleFlag($flag > 2 ? $flag + 2 : 3) && BitMask::isSingleFlag($flag) && !BitMask::isSingleFlag(0)); }
/** * * @param int|string $level * @param string $message * @param array $context * @return self */ public function log($level, $message, array $context = array()) { // Converting Psr\LogLevel to int $level = Level::toLevel($level); // Level is unknown? Stop if (!Level::is($level)) { $this->emit('unknown', $level, $message); return $this; } // If $level is a mask, explode it! if (!BitMask::isSingleFlag($level)) { $me = __FUNCTION__; foreach (BitMask::maskToFlags($level) as $flag) { $this->{$me}($flag, $message, $context); } return $this; } else { if (!$this->handler->isHandled($level)) { $this->emit('unhandled', $level, $message); return $this; } } // Make log struct $log = ['level' => $level, 'name' => Level::getLevelName($level), 'message' => $message, 'context' => $context, 'timestamp' => \microtime(true), 'extra' => []]; // Iterate the filters foreach ($this->filters as &$filter) { $log = $filter($log); } $this->emit('log', $log); $this->emit(\strtolower($log['name']), $log); // Call handler $this->handler->handle($log); return $this; }