avto-dev/sentry-laravel

Sentry for Laravel (a little bit tuned)

v2.3.0 2020-02-14 19:09 UTC

This package is auto-updated.

Last update: 2020-05-14 20:03:09 UTC


README

Sentry

Sentry for Laravel applications

Version Version Build Status Coverage Downloads count License

This package allows you to:

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

Release date Commits since latest release

Changes log can be found here.

Support

Issues Issues

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.