diff --git a/src/sentry/README.md b/src/sentry/README.md index bd2c524a1..10efe94cf 100644 --- a/src/sentry/README.md +++ b/src/sentry/README.md @@ -30,9 +30,11 @@ return [ // ... 'sentry' => [ 'handler' => [ - 'class' => \Sentry\Monolog\LogsHandler::class, + 'class' => \FriendsOfHyperf\Sentry\Monolog\LogsHandler::class, 'constructor' => [ + 'group' => 'sentry', 'level' => \Sentry\Logs\LogLevel::debug(), + 'bubble' => true, ], ], 'formatter' => [ diff --git a/src/sentry/src/Monolog/LogsHandler.php b/src/sentry/src/Monolog/LogsHandler.php new file mode 100644 index 000000000..c09cd5c1e --- /dev/null +++ b/src/sentry/src/Monolog/LogsHandler.php @@ -0,0 +1,59 @@ +|LogRecord $record + */ + public function handle($record): bool + { + if (! $this->isHandling($record)) { + return false; + } + // Do not collect logs for exceptions, they should be handled seperately by the `Handler` or `captureException` + if (isset($record['context']['exception']) && $record['context']['exception'] instanceof Throwable) { + return false; + } + + Logs::getInstance()->aggregator()->add( + self::getSentryLogLevelFromMonologLevel($record['level']), + $record['message'], + [], + array_merge( + ['log_context' => $record['context']], + ['log_extra' => $record['extra']], + ['logger' => $record['channel'] ?? ''], + ['group' => $this->group] + ) + ); + + return $this->bubble === false; + } +} diff --git a/src/sentry/src/SentryHandler.php b/src/sentry/src/SentryHandler.php index fc169e787..90d0e60c3 100644 --- a/src/sentry/src/SentryHandler.php +++ b/src/sentry/src/SentryHandler.php @@ -27,7 +27,7 @@ use Throwable; /** - * @deprecated since v3.1, use `Sentry\Monolog\LogsHandler` instead, will remove in v3.2 + * @deprecated since v3.1, use `FriendsOfHyperf\Sentry\Monolog\LogsHandler` instead, will remove in v3.2 */ class SentryHandler extends AbstractProcessingHandler {