/** * Write a message to the log. * * @param array $event log data event */ protected function doWrite(array $event) { $priority = $this->priorityMap[$event['priority']]; $extra = $event['extra']; if ($extra instanceof Traversable) { $extra = iterator_to_array($extra); } elseif (!is_array($extra)) { $extra = []; } if ($this->contextContainsException($extra)) { /** @var \Throwable $exception */ $exception = $extra['exception']; unset($extra['exception']); if ($event['message'] !== $exception->getMessage()) { $exception = new ContextException($event['message'], $exception->getCode(), $exception); } $this->client->getRaven()->captureException($exception, ['extra' => $this->sanitizeContextData($extra), 'level' => $priority]); return; } $stack = isset($extra['stack']) && is_array($extra['stack']) ? $extra['stack'] : null; if (!$stack) { $stack = $this->cleanBacktrace(debug_backtrace()); if (!count($stack)) { $stack = false; } } $this->client->getRaven()->captureMessage($event['message'], $this->sanitizeContextData($extra), $priority, $stack); }
/** * Logs with an arbitrary level. * * @param mixed $level * @param string $message * @param array $context * * @throws InvalidArgumentException */ public function log($level, $message, array $context = []) { if (!array_key_exists($level, $this->psrPriorityMap)) { throw new InvalidArgumentException(sprintf('$level must be one of PSR-3 log levels; received %s', var_export($level, 1))); } if (is_object($message) && !method_exists($message, '__toString')) { throw new InvalidArgumentException('$message must implement magic __toString() method'); } $priority = $this->psrPriorityMap[$level]; if ($this->objectIsThrowable($message)) { /* @var \Throwable $message */ $this->getRavenClient()->captureException($message, ['extra' => $this->sanitizeContextData($context), 'level' => $priority]); return; } $message = (string) $message; if ($this->contextContainsException($context)) { /** @var \Throwable $exception */ $exception = $context['exception']; unset($context['exception']); $message = $this->interpolate($message, $context); $exception = new ContextException($message, $exception->getCode(), $exception); $this->getRavenClient()->captureException($exception, ['extra' => $this->sanitizeContextData($context), 'level' => $priority]); return; } $this->getRavenClient()->captureMessage($this->interpolate($message, $context), ['extra' => $this->sanitizeContextData($context)], $priority); }