Chris@17: $level, Chris@17: 'message' => $message, Chris@17: 'context' => $context, Chris@17: ]; Chris@17: Chris@17: $this->recordsByLevel[$record['level']][] = $record; Chris@17: $this->records[] = $record; Chris@17: } Chris@17: Chris@17: public function hasRecords($level) Chris@17: { Chris@17: return isset($this->recordsByLevel[$level]); Chris@17: } Chris@17: Chris@17: public function hasRecord($record, $level) Chris@17: { Chris@17: if (is_string($record)) { Chris@17: $record = ['message' => $record]; Chris@17: } Chris@17: return $this->hasRecordThatPasses(function ($rec) use ($record) { Chris@17: if ($rec['message'] !== $record['message']) { Chris@17: return false; Chris@17: } Chris@17: if (isset($record['context']) && $rec['context'] !== $record['context']) { Chris@17: return false; Chris@17: } Chris@17: return true; Chris@17: }, $level); Chris@17: } Chris@17: Chris@17: public function hasRecordThatContains($message, $level) Chris@17: { Chris@17: return $this->hasRecordThatPasses(function ($rec) use ($message) { Chris@17: return strpos($rec['message'], $message) !== false; Chris@17: }, $level); Chris@17: } Chris@17: Chris@17: public function hasRecordThatMatches($regex, $level) Chris@17: { Chris@17: return $this->hasRecordThatPasses(function ($rec) use ($regex) { Chris@17: return preg_match($regex, $rec['message']) > 0; Chris@17: }, $level); Chris@17: } Chris@17: Chris@17: public function hasRecordThatPasses(callable $predicate, $level) Chris@17: { Chris@17: if (!isset($this->recordsByLevel[$level])) { Chris@17: return false; Chris@17: } Chris@17: foreach ($this->recordsByLevel[$level] as $i => $rec) { Chris@17: if (call_user_func($predicate, $rec, $i)) { Chris@17: return true; Chris@17: } Chris@17: } Chris@17: return false; Chris@17: } Chris@17: Chris@17: public function __call($method, $args) Chris@17: { Chris@17: if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { Chris@17: $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; Chris@17: $level = strtolower($matches[2]); Chris@17: if (method_exists($this, $genericMethod)) { Chris@17: $args[] = $level; Chris@17: return call_user_func_array([$this, $genericMethod], $args); Chris@17: } Chris@17: } Chris@17: throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); Chris@17: } Chris@17: Chris@17: public function reset() Chris@17: { Chris@17: $this->records = []; Chris@17: } Chris@17: }