# Laravel Options | Sentry for Laravel

Most configuration for Laravel is done in your `.env` file. You can also add additional config options to your `config/sentry.php` file.

## [Breadcrumbs](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options.md#breadcrumbs)

The Laravel SDK will create [breadcrumbs](https://docs.sentry.io/platforms/php/guides/laravel/enriching-events/breadcrumbs.md) for certain events occurring in the framework, the capture of this information can be configured using the following environment variables:

`config/sentry.php`

```php
'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),
],
```

## [Tracing](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options.md#tracing)

To enable tracing, set `SENTRY_TRACES_SAMPLE_RATE` to a value greater than `0.0`:

`.env`

```bash
# You may need to adjust this value in your production environment to prevent quota issues
SENTRY_TRACES_SAMPLE_RATE=1.0
```

### [Advanced Sample Rate](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options.md#advanced-sample-rate)

If you want more control over which requests are monitored, you can use the [`traces_sampler`](https://docs.sentry.io/platforms/php/guides/laravel/configuration/options.md#traces-sampler) option:

`config/sentry.php`

```php
'traces_sampler' => function (\Sentry\Tracing\SamplingContext $context): float {
    // We always sample if the front-end indicates it was sampled to have full traces front to back
    if ($context->getParentSampled()) {
        return 1.0;
    }

    if (some_condition()) {
        // Drop this transaction, by setting its sample rate to 0
        return 0.0;
    }

    // Default sample rate for all other transactions
    return 0.25;
},
```

Learn more in [Closures and Config Caching](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options.md#closures-and-config-caching).

### [More Configuration](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options.md#more-configuration)

You can also configure which parts of your application are traced automatically. These settings have no effect if `SENTRY_TRACES_SAMPLE_RATE` is set to `0.0` or if the environment variable is not set:

`config/sentry.php`

```php
'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),
],
```

## [Closures and Config Caching](https://docs.sentry.io/platforms/php/guides/laravel/configuration/laravel-options.md#closures-and-config-caching)

Sometimes the SDK requires a closure as an option value. However, this causes problems when using `php artisan config:cache`, resulting in the `Your configuration files are not serializable` error.

We can work around that by providing a callable instead of a closure. In this example we are using the `traces_sampler` option, but this can be used for any other option that accepts a closure:

`config/sentry.php`

```php
'traces_sampler' => [App\Exceptions\Sentry::class, 'tracesSampler'],
```

This callable points to the `App\Exceptions\Sentry` class and the `tracesSampler` method:

`app/Exceptions/Sentry.php`

```php
<?php

namespace App\Exceptions;

use Sentry\Tracing\SamplingContext;

class Sentry
{
    public static function tracesSampler(SamplingContext $context): float
    {
        // The code you would have placed in the closure...
    }
}
```
