import {Fragment} from 'react'; import ExternalLink from 'sentry/components/links/externalLink'; import {Layout, LayoutProps} from 'sentry/components/onboarding/gettingStartedDoc/layout'; import {ModuleProps} from 'sentry/components/onboarding/gettingStartedDoc/sdkDocumentation'; import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step'; import {t, tct} from 'sentry/locale'; // Configuration Start const introduction = (

{tct( 'This guide is for Laravel 8+. We also provide instructions for [otherVersionsLink:other versions] as well as [lumenSpecificLink:Lumen-specific instructions].', { otherVersionsLink: ( ), lumenSpecificLink: ( ), } )}

); export const steps = ({ dsn, }: Partial> = {}): LayoutProps['steps'] => [ { type: StepType.INSTALL, configurations: [ { description: (

{tct('Install the [code:sentry/sentry-laravel] package:', { code: , })}

), language: 'bash', code: `composer require sentry/sentry-laravel`, }, { description: (

{tct( 'Enable capturing unhandled exception to report to Sentry by making the following change to your [code:App/Exceptions/Handler.php]:', { code: , } )}

), language: 'php', code: ` public function register() { $this->reportable(function (Throwable $e) { if (app()->bound('sentry')) { app('sentry')->captureException($e); } }); } `, }, ], additionalInfo: (

{tct( 'Alternatively, you can configure Sentry in your [laravelLogChannelLink:Laravel Log Channel], allowing you to log [codeInfo:info] and [codeDebug:debug] as well.', { codeInfo: , codeDebug: , laravelLogChannelLink: ( ), } )}

), }, { type: StepType.CONFIGURE, configurations: [ { description: t('Configure the Sentry DSN with this command:'), language: 'shell', code: `php artisan sentry:publish --dsn=${dsn}`, }, { description: (

{tct( 'It creates the config file ([sentryPHPCode:config/sentry.php]) and adds the [dsnCode:DSN] to your ".env" file.', {dsnCode: , sentryPHPCode: } )}

), language: 'shell', code: `SENTRY_LARAVEL_DSN=${dsn}`, }, ], }, { type: StepType.VERIFY, configurations: [ { description:
{t('Verify With Artisan')}
, configurations: [ { description: (

{tct( 'You can test your configuration using the provided [code:sentry:test] artisan command:', { code: , } )}

), language: 'shell', code: 'php artisan sentry:test', }, ], }, { description:
{t('Verify With Code')}
, configurations: [ { description: t( 'You can verify that Sentry is capturing errors in your Laravel application by creating a route that will throw an exception:' ), language: 'php', code: ` Route::get('/debug-sentry', function () { throw new Exception('My first Sentry error!'); }); `, additionalInfo: t( 'Visiting this route will trigger an exception that will be captured by Sentry.' ), }, ], }, ], }, { title: t('Performance Monitoring'), configurations: [ { description: (

{tct( 'Set [tracesSampleRateCode:traces_sample_rate] in [sentryPhpCode:config/sentry.php] or [sentryTracesSampleRateCode:SENTRY_TRACES_SAMPLE_RATE] in your ".env" to a value greater than "0.0". Setting a value greater than "0.0" will enable Performance Monitoring, "0" (the default) will disable Performance Monitoring.', { tracesSampleRateCode: , sentryPhpCode: , sentryTracesSampleRateCode: , } )}

), language: 'shell', code: ` # Be sure to lower this value in production otherwise you could burn through your quota quickly. SENTRY_TRACES_SAMPLE_RATE=1.0 `, additionalInfo: ( {t( 'The example configuration above will transmit 100% of captured traces. Be sure to lower this value in production or you could use up your quota quickly.' )}

{tct( 'You can also be more granular with the sample rate by using the traces_sampler option. Learn more in [usingSampleToFilterLink:Using Sampling to Filter Transaction Events].', { usingSampleToFilterLink: ( ), } )}

{tct( "Performance data is transmitted using a new event type called 'transactions', which you can learn about in Distributed Tracing.", { distributedTracingLink: ( ), } )}

), }, ], }, { title: t('Local Development and Testing'), description: ( {t( 'When Sentry is installed in your application, it will also be active when you are developing or running tests.' )}

{tct( "You most likely don't want errors to be sent to Sentry when you are developing or running tests. To avoid this, set the DSN value to [code:null] to disable sending errors to Sentry.", { code: , } )}

{tct( 'You can also do this by not defining [sentryLaravelDsnCode:SENTRY_LARAVEL_DSN] in your [envCode:.env] or by defining it as [sentryLaravelDsnNullCode:SENTRY_LARAVEL_DSN=null].', { sentryLaravelDsnNullCode: , envCode: , sentryLaravelDsnCode: , } )}

{t( "If you do leave Sentry enabled when developing or running tests, it's possible for it to have a negative effect on the performance of your application or test suite." )}

), }, ]; // Configuration End export function GettingStartedWithLaravel({dsn, ...props}: ModuleProps) { return ; } export default GettingStartedWithLaravel;