WS-7 PR-2 commit 1. Wires sentry-laravel into the app behind a config-only no-op when SENTRY_DSN_BACKEND is empty (RFC §3.3). - composer require sentry/sentry-laravel ^4.15 (resolved 4.25.1) - config/sentry.php: DSN env mapped to SENTRY_DSN_BACKEND, environment falls back to APP_ENV, traces/profiles forced to 0.0 (RFC §2 amendment B), send_default_pii hard-pinned false, before_send to SentryEventScrubber, ignore_exceptions covers ValidationException / AuthenticationException / AuthorizationException. - app/Services/Observability/SentryEventScrubber.php: recursive body / header / query-string scrubber + form_values wholesale replacement + HttpException sub-500 drop (status filter that ignore_exceptions cannot do class-only). Max-depth guard against malicious payloads. - app/Enums/Observability/ActorType.php: enum + resolver for §3.6 actor_type tag (consumed by BindSentryContext in commit 2). - tests/Feature/Observability/PiiScrubbingTest.php: 20 cases. - api/.env.example: SENTRY_DSN_BACKEND + SENTRY_RELEASE entries. Larastan: clean. Test count: 1487 to 1507. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
156 lines
7.3 KiB
PHP
156 lines
7.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Sentry Laravel SDK configuration file.
|
|
*
|
|
* @see https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/
|
|
*/
|
|
return [
|
|
|
|
// @see https://docs.sentry.io/concepts/key-terms/dsn-explainer/
|
|
// Crewli convention: SENTRY_DSN_BACKEND maps to the crewli-api project
|
|
// DSN in 1Password vault. Empty = SDK no-op (RFC-WS-7 §3.3).
|
|
'dsn' => env('SENTRY_DSN_BACKEND'),
|
|
|
|
// @see https://spotlightjs.com/
|
|
// 'spotlight' => env('SENTRY_SPOTLIGHT', false),
|
|
|
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#logger
|
|
// 'logger' => Sentry\Logger\DebugFileLogger::class, // By default this will log to `storage_path('logs/sentry.log')`
|
|
|
|
// The release version of your application
|
|
// Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD'))
|
|
'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', env('APP_ENV')),
|
|
|
|
// Crewli observability scrubber (RFC-WS-7 §3.7).
|
|
'before_send' => static fn (\Sentry\Event $event, ?\Sentry\EventHint $hint = null): ?\Sentry\Event => app(\App\Services\Observability\SentryEventScrubber::class)->scrub($event, $hint),
|
|
|
|
// Errors-only — RFC §2 amendment B explicitly excludes performance tracing.
|
|
// Force traces/profiles off regardless of env.
|
|
'traces_sample_rate' => 0.0,
|
|
'profiles_sample_rate' => 0.0,
|
|
|
|
// Boundary with existing systems (RFC §3.10): exclude expected business
|
|
// outcomes. HTTPException is filtered further by status code in the
|
|
// scrubber (sub-500s are dropped there).
|
|
'ignore_exceptions' => [
|
|
\Illuminate\Validation\ValidationException::class,
|
|
\Illuminate\Auth\AuthenticationException::class,
|
|
\Illuminate\Auth\Access\AuthorizationException::class,
|
|
],
|
|
|
|
// Override the organization ID used for trace continuation checks.
|
|
'org_id' => env('SENTRY_ORG_ID') === null ? null : (int) env('SENTRY_ORG_ID'),
|
|
|
|
// @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'),
|
|
|
|
// Only continue incoming traces when the organization IDs are compatible with this SDK instance.
|
|
'strict_trace_continuation' => env('SENTRY_STRICT_TRACE_CONTINUATION', false),
|
|
|
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#enable_logs
|
|
'enable_logs' => env('SENTRY_ENABLE_LOGS', false),
|
|
|
|
// @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#log_flush_threshold
|
|
'log_flush_threshold' => env('SENTRY_LOG_FLUSH_THRESHOLD') === null ? null : (int) env('SENTRY_LOG_FLUSH_THRESHOLD'),
|
|
|
|
// 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'))),
|
|
|
|
// RFC-WS-7 §3.7 point 5 / §3.8 — strip locals from stack traces and IP
|
|
// from user context. Hard-pinned, no env override.
|
|
'send_default_pii' => false,
|
|
|
|
// @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', false),
|
|
|
|
// Capture queue jobs as spans when executed on the sync driver
|
|
'queue_jobs' => env('SENTRY_TRACE_QUEUE_JOBS_ENABLED', false),
|
|
|
|
// 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),
|
|
],
|
|
|
|
];
|