mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-11-16 14:48:11 +00:00
Add support for sentry.
This commit is contained in:
@@ -275,6 +275,14 @@ DISABLE_CSP_HEADER=false
|
|||||||
TRACKER_SITE_ID=
|
TRACKER_SITE_ID=
|
||||||
TRACKER_URL=
|
TRACKER_URL=
|
||||||
|
|
||||||
|
#
|
||||||
|
# You can automatically submit errors to the Firefly III developer using sentry.io
|
||||||
|
#
|
||||||
|
# This is entirely optional of course. If you run into errors, I will gladly accept GitHub
|
||||||
|
# issues or a forwared email message.
|
||||||
|
#
|
||||||
|
TRACK_ERRORS=false
|
||||||
|
|
||||||
#
|
#
|
||||||
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
|
# Firefly III supports webhooks. These are security sensitive and must be enabled manually first.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ abstract class AggregateFormRequest extends ApiRequest
|
|||||||
*/
|
*/
|
||||||
protected array $requests = [];
|
protected array $requests = [];
|
||||||
|
|
||||||
/** @return class-string[] */
|
/** @return array<string|array> */
|
||||||
abstract protected function getRequests(): array;
|
abstract protected function getRequests(): array;
|
||||||
|
|
||||||
public function initialize(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null): void
|
public function initialize(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null): void
|
||||||
@@ -47,6 +47,7 @@ abstract class AggregateFormRequest extends ApiRequest
|
|||||||
// instantiate all subrequests and share current requests' bags with them
|
// instantiate all subrequests and share current requests' bags with them
|
||||||
Log::debug('Initializing AggregateFormRequest.');
|
Log::debug('Initializing AggregateFormRequest.');
|
||||||
|
|
||||||
|
/** @var array|string $config */
|
||||||
foreach ($this->getRequests() as $config) {
|
foreach ($this->getRequests() as $config) {
|
||||||
$requestClass = is_array($config) ? array_shift($config) : $config;
|
$requestClass = is_array($config) ? array_shift($config) : $config;
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ use Illuminate\Validation\ValidationException as LaravelValidationException;
|
|||||||
use Laravel\Passport\Exceptions\OAuthServerException as LaravelOAuthException;
|
use Laravel\Passport\Exceptions\OAuthServerException as LaravelOAuthException;
|
||||||
use League\OAuth2\Server\Exception\OAuthServerException;
|
use League\OAuth2\Server\Exception\OAuthServerException;
|
||||||
use Override;
|
use Override;
|
||||||
|
use Sentry\Laravel\Integration;
|
||||||
use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException;
|
use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
|
||||||
@@ -49,11 +50,11 @@ use Symfony\Component\HttpKernel\Exception\HttpException;
|
|||||||
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
|
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
use function Safe\json_encode;
|
use function Safe\json_encode;
|
||||||
use function Safe\parse_url;
|
use function Safe\parse_url;
|
||||||
|
|
||||||
// temp
|
// temp
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Handler
|
* Class Handler
|
||||||
*/
|
*/
|
||||||
@@ -81,7 +82,14 @@ class Handler extends ExceptionHandler
|
|||||||
* Register the exception handling callbacks for the application.
|
* Register the exception handling callbacks for the application.
|
||||||
*/
|
*/
|
||||||
#[Override]
|
#[Override]
|
||||||
public function register(): void {}
|
public function register(): void
|
||||||
|
{
|
||||||
|
if (true === config('firefly.track_errors')) {
|
||||||
|
$this->reportable(function (Throwable $e) {
|
||||||
|
Integration::captureUnhandledException($e);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render an exception into an HTTP response. It's complex but lucky for us, we never use it because
|
* Render an exception into an HTTP response. It's complex but lucky for us, we never use it because
|
||||||
@@ -160,7 +168,7 @@ class Handler extends ExceptionHandler
|
|||||||
$errorCode = 500;
|
$errorCode = 500;
|
||||||
$errorCode = $e instanceof MethodNotAllowedHttpException ? 405 : $errorCode;
|
$errorCode = $e instanceof MethodNotAllowedHttpException ? 405 : $errorCode;
|
||||||
|
|
||||||
$isDebug = (bool) config('app.debug', false);
|
$isDebug = (bool)config('app.debug', false);
|
||||||
if ($isDebug) {
|
if ($isDebug) {
|
||||||
Log::debug(sprintf('Return JSON %s with debug.', $e::class));
|
Log::debug(sprintf('Return JSON %s with debug.', $e::class));
|
||||||
|
|
||||||
@@ -219,7 +227,7 @@ class Handler extends ExceptionHandler
|
|||||||
public function report(Throwable $e): void
|
public function report(Throwable $e): void
|
||||||
{
|
{
|
||||||
self::$lastError = $e;
|
self::$lastError = $e;
|
||||||
$doMailError = (bool) config('firefly.send_error_message');
|
$doMailError = (bool)config('firefly.send_error_message');
|
||||||
if ($this->shouldntReportLocal($e) || !$doMailError) {
|
if ($this->shouldntReportLocal($e) || !$doMailError) {
|
||||||
parent::report($e);
|
parent::report($e);
|
||||||
|
|
||||||
@@ -255,7 +263,7 @@ class Handler extends ExceptionHandler
|
|||||||
|
|
||||||
// create job that will mail.
|
// create job that will mail.
|
||||||
$ipAddress = request()->ip() ?? '0.0.0.0';
|
$ipAddress = request()->ip() ?? '0.0.0.0';
|
||||||
$job = new MailError($userData, (string) config('firefly.site_owner'), $ipAddress, $data);
|
$job = new MailError($userData, (string)config('firefly.site_owner'), $ipAddress, $data);
|
||||||
dispatch($job);
|
dispatch($job);
|
||||||
|
|
||||||
parent::report($e);
|
parent::report($e);
|
||||||
@@ -265,7 +273,7 @@ class Handler extends ExceptionHandler
|
|||||||
{
|
{
|
||||||
return null !== Arr::first(
|
return null !== Arr::first(
|
||||||
$this->dontReport,
|
$this->dontReport,
|
||||||
static fn ($type) => $e instanceof $type
|
static fn($type) => $e instanceof $type
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,7 +283,7 @@ class Handler extends ExceptionHandler
|
|||||||
* @param Request $request
|
* @param Request $request
|
||||||
*/
|
*/
|
||||||
#[Override]
|
#[Override]
|
||||||
protected function invalid($request, LaravelValidationException $exception): \Illuminate\Http\Response|JsonResponse|RedirectResponse
|
protected function invalid($request, LaravelValidationException $exception): \Illuminate\Http\Response | JsonResponse | RedirectResponse
|
||||||
{
|
{
|
||||||
// protect against open redirect when submitting invalid forms.
|
// protect against open redirect when submitting invalid forms.
|
||||||
$previous = app('steam')->getSafePreviousUrl();
|
$previous = app('steam')->getSafePreviousUrl();
|
||||||
@@ -283,8 +291,7 @@ class Handler extends ExceptionHandler
|
|||||||
|
|
||||||
return redirect($redirect ?? $previous)
|
return redirect($redirect ?? $previous)
|
||||||
->withInput(Arr::except($request->input(), $this->dontFlash))
|
->withInput(Arr::except($request->input(), $this->dontFlash))
|
||||||
->withErrors($exception->errors(), $request->input('_error_bag', $exception->errorBag))
|
->withErrors($exception->errors(), $request->input('_error_bag', $exception->errorBag));
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -103,6 +103,7 @@
|
|||||||
"psr/log": "<4",
|
"psr/log": "<4",
|
||||||
"ramsey/uuid": "^4.7",
|
"ramsey/uuid": "^4.7",
|
||||||
"rcrowe/twigbridge": "^0.14",
|
"rcrowe/twigbridge": "^0.14",
|
||||||
|
"sentry/sentry-laravel": "^4.18",
|
||||||
"spatie/laravel-html": "^3.2",
|
"spatie/laravel-html": "^3.2",
|
||||||
"spatie/laravel-ignition": "^2",
|
"spatie/laravel-ignition": "^2",
|
||||||
"spatie/period": "^2.4",
|
"spatie/period": "^2.4",
|
||||||
|
|||||||
239
composer.lock
generated
239
composer.lock
generated
@@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "5c65637d2a997c3503e4922eb7647e2a",
|
"content-hash": "946638fa99da77780e75953c338d9a55",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
@@ -1808,6 +1808,66 @@
|
|||||||
},
|
},
|
||||||
"time": "2022-03-31T05:55:34+00:00"
|
"time": "2022-03-31T05:55:34+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "jean85/pretty-package-versions",
|
||||||
|
"version": "2.1.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/Jean85/pretty-package-versions.git",
|
||||||
|
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a",
|
||||||
|
"reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-runtime-api": "^2.1.0",
|
||||||
|
"php": "^7.4|^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.2",
|
||||||
|
"jean85/composer-provided-replaced-stub-package": "^1.0",
|
||||||
|
"phpstan/phpstan": "^2.0",
|
||||||
|
"phpunit/phpunit": "^7.5|^8.5|^9.6",
|
||||||
|
"rector/rector": "^2.0",
|
||||||
|
"vimeo/psalm": "^4.3 || ^5.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Jean85\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Alessandro Lai",
|
||||||
|
"email": "alessandro.lai85@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A library to get pretty versions strings of installed dependencies",
|
||||||
|
"keywords": [
|
||||||
|
"composer",
|
||||||
|
"package",
|
||||||
|
"release",
|
||||||
|
"versions"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/Jean85/pretty-package-versions/issues",
|
||||||
|
"source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1"
|
||||||
|
},
|
||||||
|
"time": "2025-03-19T14:43:43+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "laravel-notification-channels/pushover",
|
"name": "laravel-notification-channels/pushover",
|
||||||
"version": "4.1.2",
|
"version": "4.1.2",
|
||||||
@@ -5903,6 +5963,183 @@
|
|||||||
},
|
},
|
||||||
"time": "2025-08-20T11:25:49+00:00"
|
"time": "2025-08-20T11:25:49+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "sentry/sentry",
|
||||||
|
"version": "4.17.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/getsentry/sentry-php.git",
|
||||||
|
"reference": "5c696b8de57e841a2bf3b6f6eecfd99acfdda80c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/5c696b8de57e841a2bf3b6f6eecfd99acfdda80c",
|
||||||
|
"reference": "5c696b8de57e841a2bf3b6f6eecfd99acfdda80c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-curl": "*",
|
||||||
|
"ext-json": "*",
|
||||||
|
"ext-mbstring": "*",
|
||||||
|
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
|
||||||
|
"jean85/pretty-package-versions": "^1.5|^2.0.4",
|
||||||
|
"php": "^7.2|^8.0",
|
||||||
|
"psr/log": "^1.0|^2.0|^3.0",
|
||||||
|
"symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"raven/raven": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.4",
|
||||||
|
"guzzlehttp/promises": "^2.0.3",
|
||||||
|
"guzzlehttp/psr7": "^1.8.4|^2.1.1",
|
||||||
|
"monolog/monolog": "^1.6|^2.0|^3.0",
|
||||||
|
"phpbench/phpbench": "^1.0",
|
||||||
|
"phpstan/phpstan": "^1.3",
|
||||||
|
"phpunit/phpunit": "^8.5|^9.6",
|
||||||
|
"vimeo/psalm": "^4.17"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/functions.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Sentry\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Sentry",
|
||||||
|
"email": "accounts@sentry.io"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP SDK for Sentry (http://sentry.io)",
|
||||||
|
"homepage": "http://sentry.io",
|
||||||
|
"keywords": [
|
||||||
|
"crash-reporting",
|
||||||
|
"crash-reports",
|
||||||
|
"error-handler",
|
||||||
|
"error-monitoring",
|
||||||
|
"log",
|
||||||
|
"logging",
|
||||||
|
"profiling",
|
||||||
|
"sentry",
|
||||||
|
"tracing"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/getsentry/sentry-php/issues",
|
||||||
|
"source": "https://github.com/getsentry/sentry-php/tree/4.17.1"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://sentry.io/",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://sentry.io/pricing/",
|
||||||
|
"type": "custom"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-10-23T15:19:24+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sentry/sentry-laravel",
|
||||||
|
"version": "4.18.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/getsentry/sentry-laravel.git",
|
||||||
|
"reference": "b9a647f93f9a040eaf6f21d0684f2351310d3360"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/b9a647f93f9a040eaf6f21d0684f2351310d3360",
|
||||||
|
"reference": "b9a647f93f9a040eaf6f21d0684f2351310d3360",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0",
|
||||||
|
"nyholm/psr7": "^1.0",
|
||||||
|
"php": "^7.2 | ^8.0",
|
||||||
|
"sentry/sentry": "^4.16.0",
|
||||||
|
"symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.11",
|
||||||
|
"guzzlehttp/guzzle": "^7.2",
|
||||||
|
"laravel/folio": "^1.1",
|
||||||
|
"laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0",
|
||||||
|
"livewire/livewire": "^2.0 | ^3.0",
|
||||||
|
"mockery/mockery": "^1.3",
|
||||||
|
"orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0",
|
||||||
|
"phpstan/phpstan": "^1.10",
|
||||||
|
"phpunit/phpunit": "^8.4 | ^9.3 | ^10.4 | ^11.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"laravel": {
|
||||||
|
"aliases": {
|
||||||
|
"Sentry": "Sentry\\Laravel\\Facade"
|
||||||
|
},
|
||||||
|
"providers": [
|
||||||
|
"Sentry\\Laravel\\ServiceProvider",
|
||||||
|
"Sentry\\Laravel\\Tracing\\ServiceProvider"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"Sentry\\Laravel\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Sentry",
|
||||||
|
"email": "accounts@sentry.io"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Laravel SDK for Sentry (https://sentry.io)",
|
||||||
|
"homepage": "https://sentry.io",
|
||||||
|
"keywords": [
|
||||||
|
"crash-reporting",
|
||||||
|
"crash-reports",
|
||||||
|
"error-handler",
|
||||||
|
"error-monitoring",
|
||||||
|
"laravel",
|
||||||
|
"log",
|
||||||
|
"logging",
|
||||||
|
"profiling",
|
||||||
|
"sentry",
|
||||||
|
"tracing"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/getsentry/sentry-laravel/issues",
|
||||||
|
"source": "https://github.com/getsentry/sentry-laravel/tree/4.18.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://sentry.io/",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://sentry.io/pricing/",
|
||||||
|
"type": "custom"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2025-10-20T12:57:51+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "spatie/backtrace",
|
"name": "spatie/backtrace",
|
||||||
"version": "1.8.1",
|
"version": "1.8.1",
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ return [
|
|||||||
'demo_password' => env('DEMO_PASSWORD', ''),
|
'demo_password' => env('DEMO_PASSWORD', ''),
|
||||||
'tracker_site_id' => env('TRACKER_SITE_ID', ''),
|
'tracker_site_id' => env('TRACKER_SITE_ID', ''),
|
||||||
'tracker_url' => env('TRACKER_URL', ''),
|
'tracker_url' => env('TRACKER_URL', ''),
|
||||||
|
'track_errors' => env('TRACK_ERRORS', false),
|
||||||
|
|
||||||
// authentication settings
|
// authentication settings
|
||||||
'authentication_guard' => envNonEmpty('AUTHENTICATION_GUARD', 'web'),
|
'authentication_guard' => envNonEmpty('AUTHENTICATION_GUARD', 'web'),
|
||||||
|
|||||||
126
config/sentry.php
Normal file
126
config/sentry.php
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sentry Laravel SDK configuration file.
|
||||||
|
*
|
||||||
|
* @see https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/
|
||||||
|
*/
|
||||||
|
return [
|
||||||
|
'dsn' => 'SENTRY_LARAVEL_DSN=https://cf9d7aea92537db1e97e3e758b88b0a3@o4510302583848960.ingest.de.sentry.io/4510302585290832',
|
||||||
|
'release' => env('SENTRY_RELEASE'),
|
||||||
|
|
||||||
|
// When left empty or `null` the Laravel environment will be used (usually discovered from `APP_ENV` in your `.env`)
|
||||||
|
'environment' => env('SENTRY_ENVIRONMENT'),
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#sample_rate
|
||||||
|
'sample_rate' => env('SENTRY_SAMPLE_RATE') === null ? 1.0 : (float)env('SENTRY_SAMPLE_RATE'),
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces_sample_rate
|
||||||
|
'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_TRACES_SAMPLE_RATE'),
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#profiles-sample-rate
|
||||||
|
'profiles_sample_rate' => env('SENTRY_PROFILES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_PROFILES_SAMPLE_RATE'),
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#enable_logs
|
||||||
|
'enable_logs' => env('SENTRY_ENABLE_LOGS', false),
|
||||||
|
|
||||||
|
// The minimum log level that will be sent to Sentry as logs using the `sentry_logs` logging channel
|
||||||
|
'logs_channel_level' => env('SENTRY_LOG_LEVEL', env('SENTRY_LOGS_LEVEL', env('LOG_LEVEL', 'debug'))),
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send_default_pii
|
||||||
|
'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false),
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore_exceptions
|
||||||
|
'ignore_exceptions' => [
|
||||||
|
\Illuminate\Auth\AuthenticationException::class,
|
||||||
|
],
|
||||||
|
|
||||||
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#ignore_transactions
|
||||||
|
'ignore_transactions' => [
|
||||||
|
// Ignore Laravel's default health URL
|
||||||
|
'/up',
|
||||||
|
],
|
||||||
|
|
||||||
|
// Breadcrumb specific configuration
|
||||||
|
'breadcrumbs' => [
|
||||||
|
// Capture Laravel logs as breadcrumbs
|
||||||
|
'logs' => env('SENTRY_BREADCRUMBS_LOGS_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture Laravel cache events (hits, writes etc.) as breadcrumbs
|
||||||
|
'cache' => env('SENTRY_BREADCRUMBS_CACHE_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture Livewire components like routes as breadcrumbs
|
||||||
|
'livewire' => env('SENTRY_BREADCRUMBS_LIVEWIRE_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture SQL queries as breadcrumbs
|
||||||
|
'sql_queries' => env('SENTRY_BREADCRUMBS_SQL_QUERIES_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture SQL query bindings (parameters) in SQL query breadcrumbs
|
||||||
|
'sql_bindings' => env('SENTRY_BREADCRUMBS_SQL_BINDINGS_ENABLED', false),
|
||||||
|
|
||||||
|
// Capture queue job information as breadcrumbs
|
||||||
|
'queue_info' => env('SENTRY_BREADCRUMBS_QUEUE_INFO_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture command information as breadcrumbs
|
||||||
|
'command_info' => env('SENTRY_BREADCRUMBS_COMMAND_JOBS_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture HTTP client request information as breadcrumbs
|
||||||
|
'http_client_requests' => env('SENTRY_BREADCRUMBS_HTTP_CLIENT_REQUESTS_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture send notifications as breadcrumbs
|
||||||
|
'notifications' => env('SENTRY_BREADCRUMBS_NOTIFICATIONS_ENABLED', true),
|
||||||
|
],
|
||||||
|
|
||||||
|
// Performance monitoring specific configuration
|
||||||
|
'tracing' => [
|
||||||
|
// Trace queue jobs as their own transactions (this enables tracing for queue jobs)
|
||||||
|
'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture queue jobs as spans when executed on the sync driver
|
||||||
|
'queue_jobs' => env('SENTRY_TRACE_QUEUE_JOBS_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture SQL queries as spans
|
||||||
|
'sql_queries' => env('SENTRY_TRACE_SQL_QUERIES_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture SQL query bindings (parameters) in SQL query spans
|
||||||
|
'sql_bindings' => env('SENTRY_TRACE_SQL_BINDINGS_ENABLED', false),
|
||||||
|
|
||||||
|
// Capture where the SQL query originated from on the SQL query spans
|
||||||
|
'sql_origin' => env('SENTRY_TRACE_SQL_ORIGIN_ENABLED', true),
|
||||||
|
|
||||||
|
// Define a threshold in milliseconds for SQL queries to resolve their origin
|
||||||
|
'sql_origin_threshold_ms' => env('SENTRY_TRACE_SQL_ORIGIN_THRESHOLD_MS', 100),
|
||||||
|
|
||||||
|
// Capture views rendered as spans
|
||||||
|
'views' => env('SENTRY_TRACE_VIEWS_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture Livewire components as spans
|
||||||
|
'livewire' => env('SENTRY_TRACE_LIVEWIRE_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture HTTP client requests as spans
|
||||||
|
'http_client_requests' => env('SENTRY_TRACE_HTTP_CLIENT_REQUESTS_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture Laravel cache events (hits, writes etc.) as spans
|
||||||
|
'cache' => env('SENTRY_TRACE_CACHE_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture Redis operations as spans (this enables Redis events in Laravel)
|
||||||
|
'redis_commands' => env('SENTRY_TRACE_REDIS_COMMANDS', false),
|
||||||
|
|
||||||
|
// Capture where the Redis command originated from on the Redis command spans
|
||||||
|
'redis_origin' => env('SENTRY_TRACE_REDIS_ORIGIN_ENABLED', true),
|
||||||
|
|
||||||
|
// Capture send notifications as spans
|
||||||
|
'notifications' => env('SENTRY_TRACE_NOTIFICATIONS_ENABLED', true),
|
||||||
|
|
||||||
|
// Enable tracing for requests without a matching route (404's)
|
||||||
|
'missing_routes' => env('SENTRY_TRACE_MISSING_ROUTES_ENABLED', false),
|
||||||
|
|
||||||
|
// Configures if the performance trace should continue after the response has been sent to the user until the application terminates
|
||||||
|
// This is required to capture any spans that are created after the response has been sent like queue jobs dispatched using `dispatch(...)->afterResponse()` for example
|
||||||
|
'continue_after_response' => env('SENTRY_TRACE_CONTINUE_AFTER_RESPONSE', true),
|
||||||
|
|
||||||
|
// Enable the tracing integrations supplied by Sentry (recommended)
|
||||||
|
'default_integrations' => env('SENTRY_TRACE_DEFAULT_INTEGRATIONS_ENABLED', true),
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user