avto-dev / sentry-laravel
Sentry for Laravel (a little bit tuned)
Installs: 14 597
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 1
Open Issues: 0
Requires
- php: ^7.2
- illuminate/container: ~6.0 || ~7.0 || ~8.0
- illuminate/support: ~6.0 || ~7.0 || ~8.0
- sentry/sentry-laravel: ^1.6
Requires (Dev)
- avto-dev/app-version-laravel: ^2.1 || ~3.0
- laravel/laravel: ~6.0 || ~7.0 || ~8.0
- mockery/mockery: ^1.3
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8.5.4 || ^9.3
Suggests
- avto-dev/app-version-laravel: Adds release version into sentry events (^3.0)
README
Sentry for Laravel applications
This package allows you to:
- Integrate package
avto-dev/app-version-laravel
withsentry/sentry-laravel
.
Full documentation can be found here
Install
Require this package with composer using the following command:
$ composer require avto-dev/sentry-laravel "^2.3"
Installed
composer
is required (how to install composer).
You need to fix the major version of package.
Add Sentry reporting to ./app/Exceptions/Handler.php
:
<?php namespace App\Exceptions; class Handler extends \Illuminate\Foundation\Exceptions\Handler { // ... /** * Report or log an exception. * * @param \Exception $exception * * @return void */ public function report(\Exception $exception): void { if ($this->container->bound('sentry') && $this->shouldReport($exception)) { try { $this->container->make('sentry')->captureException($exception); } catch (\Exception $e) { $this->container->make(\Psr\Log\LoggerInterface::class)->error( 'Cannot capture exception with sentry: ' . $e->getMessage(), ['exception' => $e] ); } } parent::report($exception); } // ... }
Create the Sentry configuration file (./config/sentry.php
) with this command:
If you already have
./config/sentry.php
file - rename it using next command:$ test -f ./config/sentry.php && mv ./config/sentry.php ./config/sentry.php.old
$ php artisan vendor:publish --tag=sentry-config --force
And edit it on your choice.
Testing with Artisan
You can test your configuration using the provided artisan
command:
$ php artisan sentry:test [sentry] Client DSN discovered! [sentry] Generating test event [sentry] Sending test event [sentry] Event sent: e6442bd7806444fc8b2710abce3599ac
Local development
When Sentry is installed in your application it will also be active when you are developing.
If you don't want errors to be sent to Sentry when you are developing set the DSN value to null
(define SENTRY_LARAVEL_DSN=null
in your .env
file).
Using Laravel log channels
Note: If you’re using log channels to log your exceptions and are also logging exceptions to Sentry in your exception handler (as you would have configured above) exceptions might end up twice in Sentry
To configure Sentry as a log channel, add the following config to the channels
section in ./config/logging.php
:
<?php return [ 'channels' => [ // ... 'sentry' => [ 'driver' => 'sentry', ], ], ];
After you configured the Sentry log channel, you can configure your app to both log to a log file and to Sentry by modifying the log stack:
<?php return [ 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'sentry'], // Add the Sentry log channel to the stack ], // ... ], ];
Optionally, you can set the logging level and if events should bubble on the driver:
And modify next lines:
<?php return [ 'channels' => [ // ... 'sentry' => [ 'driver' => 'sentry', 'level' => null, // The minimum monolog logging level at which this handler will be triggered // For example: `\Monolog\Logger::ERROR` 'bubble' => true, // Whether the messages that are handled can bubble up the stack or not ], ], ];
Naming you log channels
If you have multiple log channels you would like to filter on inside the Sentry interface, you can add the name
attribute to the log channel. It will show up in Sentry as the logger
tag, which is filterable.
For example:
<?php return [ 'channels' => [ // ... 'my_stacked_channel' => [ 'driver' => 'stack', 'channels' => ['single', 'sentry'], 'name' => 'my-channel' ], ], ];
You’re now able to log errors to your channel:
<?php \Illuminate\Support\Facades\Log::channel('my_stacked_channel')->error('My error');
And Sentry's logger
tag now has the channel's name
. You can filter on the "my-channel" value.
Testing
For package testing we use phpunit
framework and docker-ce
+ docker-compose
as develop environment. So, just write into your terminal after repository cloning:
$ make build $ make latest # or 'make lowest' $ make test
Changes log
Changes log can be found here.
Support
If you will find any package errors, please, make an issue in current repository.
License
This is open-sourced software licensed under the MIT License.