Raven is a client for recording and transmitting messages to Sentry.
Its special sauce is that it can transmit those messages to Sentry in the background. No more slow down while a HTTP request is made!
Raven offers flexibility in how those messages are captured, processed & sent. But also offers quick seemless intergration into a range of frameworks, such as:
Add rcrowe\raven
as a requirement to composer.json:
{
"require": {
"rcrowe/raven": "~0.2.0"
}
}
Update your packages with composer update
or install with composer install
.
Then follow the instructions for your provider (if you are using one).
This library exposes the same API for recording your messages as the official raven-php client. It should just be a case of
replacing Raven_Client
with rcrowe\Raven\Client
. For usage of recording messages checkout out raven-php.
To record a message and transmit it to Sentry straight away (the default):
$raven = new \rcrowe\Raven\Client(##DSN##);
$raven->captureMessage('FooBar');
Handlers are responsible for taking a new captured message and putting into a background queue. If no handler is registered with the raven client the message is transmitted straight away.
A handler can be added to the client as follows:
$raven = new \rcrowe\Raven\Client(##DSN##);
$raven->setHandler(
new \rcrowe\Raven\Handler\Sync
);
(Default) Like raven-php new messages are transmitted straight away.
If using within a Laravel project, makes use of the illuminate\queue
API. For improved Laravel intergration checkout the Laravel provider below.
$raven = new \rcrowe\Raven\Client(##DSN##);
$raven->setHandler(
new \rcrowe\Raven\Handler\Laravel(
null,
App::make('queue')
);
);
Transports are responsible for sending the message to the Sentry API. Transports are always the first parameter passed into a handler. If no transport is provided it will default to HTTP.
$raven->setHandler(
new \rcrowe\Raven\Handler\Sync(
new \rcrowe\Raven\Transport\Dummy
)
);
Dummy transport does absolutely nothing. Nothing is transmitted to the API. You may not want to transmit any messages when working in a dev environment.
(Default) Transmit the message over HTTP. To do this we make use of the great HTTP client Guzzle.
$raven->setHandler(
new \rcrowe\Raven\Handler\Sync(
new \rcrowe\Raven\Transport\Guzzle
)
);
As this is the default transport mechanism there is no need to pass it into the handler. The above call is the same as:
$raven->addHandler(
new \rcrowe\Raven\Handler\Sync
);
Providers offer painless integration to other libraries / frameworks.
Add the service provider to app/config/app.php
:
'rcrowe\Raven\Provider\Laravel\RavenServiceProvider',
Optionally register the facade to your aliases:
'Sentry' => 'rcrowe\Raven\Provider\Laravel\Facade\Raven',
Raven needs to know your client DSN. First publish the Raven config file with the following command:
php artisan config:publish rcrowe/raven
Then edit app/config/packages/rcrowe/raven/config.php
You can also set your Raven DSN from app/config/services.php
:
'raven' => [
'dsn' => '...'
],
Note: Raven makes use of the Laravel queue, so make sure your app/config/queue.php
is set correctly.
Now where ever you want to record a message just use the normal Log facade.
try {
throw new Exception('This is an example');
} catch (Exception $ex) {
Log::error($ex);
}
To capture and send all messages you can add the following:
App::error(function(Exception $exception, $code)
{
Log::error($exception);
});
Note: Be aware that Laravel does this out of the box in app/start/global.php
Using the alias you can set / remove the user information for all messages:
Sentry::setUser([
'id' => 1,
'name' => 'Rob Crowe',
]);
Sentry::removeUser();
Note: Check out the config file for more!