/** * @test * @depends addTest * @depends addTest2 */ public function flagsTest() { $flags = []; $mask = 0; while (\count($flags) < 5) { $power = \mt_rand(0, 10); $flag = \pow(2, $power); $flags[] = $flag; $mask = BitMask::addFlag($mask, $flag); } $flags = \array_unique($flags); \sort($flags); $flags2 = BitMask::maskToFlags($mask); $this->assertTrue($flags === $flags2); }
/** * * @return bool */ public function isWritable() { return $this->flags->has(self::WRITABLE); }
/** * @test * @depends listLevelsTest */ public function isTest() { $list = Level::listLevels(); $mask = 0; foreach ($list as $name => $level) { $this->assertTrue(Level::is($level)); $mask = BitMask::addFlag($mask, $level); } $this->assertTrue(Level::is($mask)); $this->assertFalse(Level::is(1 << 10)); }
/** * Attach a logger handler on the end of list. * * @param HandlerInterface $handler * @return self */ public function pushHandler(HandlerInterface $handler) { $this->handlers[] = $handler; $this->level = BitMask::addFlag($this->level, $handler->getHandledLevel()); return $this; }
/** * * @param int $level * @return bool */ public function isHandled($level) { return BitMask::hasFlag($this->level, $level); }
/** * * @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; }
/** * Returns a bitmask with all log levels registered. * * @return BitMask */ public static function maskAll() { static $mask = null; if (\is_null($mask)) { $mask = new BitMask(); foreach (static::listLevels() as $level) { $mask->add($level); } } return clone $mask; }