laravel.tsx 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. import {Fragment} from 'react';
  2. import ExternalLink from 'sentry/components/links/externalLink';
  3. import {Layout, LayoutProps} from 'sentry/components/onboarding/gettingStartedDoc/layout';
  4. import {ModuleProps} from 'sentry/components/onboarding/gettingStartedDoc/sdkDocumentation';
  5. import {StepType} from 'sentry/components/onboarding/gettingStartedDoc/step';
  6. import {t, tct} from 'sentry/locale';
  7. // Configuration Start
  8. const introduction = (
  9. <p>
  10. {tct(
  11. 'This guide is for Laravel 8+. We also provide instructions for [otherVersionsLink:other versions] as well as [lumenSpecificLink:Lumen-specific instructions].',
  12. {
  13. otherVersionsLink: (
  14. <ExternalLink href="https://docs.sentry.io/platforms/php/guides/laravel/other-versions/" />
  15. ),
  16. lumenSpecificLink: (
  17. <ExternalLink href="https://docs.sentry.io/platforms/php/guides/laravel/other-versions/lumen/" />
  18. ),
  19. }
  20. )}
  21. </p>
  22. );
  23. export const steps = ({
  24. dsn,
  25. }: Partial<Pick<ModuleProps, 'dsn'>> = {}): LayoutProps['steps'] => [
  26. {
  27. type: StepType.INSTALL,
  28. configurations: [
  29. {
  30. description: (
  31. <p>
  32. {tct('Install the [code:sentry/sentry-laravel] package:', {
  33. code: <code />,
  34. })}
  35. </p>
  36. ),
  37. language: 'bash',
  38. code: `composer require sentry/sentry-laravel`,
  39. },
  40. {
  41. description: (
  42. <p>
  43. {tct(
  44. 'Enable capturing unhandled exception to report to Sentry by making the following change to your [code:App/Exceptions/Handler.php]:',
  45. {
  46. code: <code />,
  47. }
  48. )}
  49. </p>
  50. ),
  51. language: 'php',
  52. code: `
  53. public function register() {
  54. $this->reportable(function (Throwable $e) {
  55. if (app()->bound('sentry')) {
  56. app('sentry')->captureException($e);
  57. }
  58. });
  59. }
  60. `,
  61. },
  62. ],
  63. additionalInfo: (
  64. <p>
  65. {tct(
  66. 'Alternatively, you can configure Sentry in your [laravelLogChannelLink:Laravel Log Channel], allowing you to log [codeInfo:info] and [codeDebug:debug] as well.',
  67. {
  68. codeInfo: <code />,
  69. codeDebug: <code />,
  70. laravelLogChannelLink: (
  71. <ExternalLink href="https://docs.sentry.io/platforms/php/guides/laravel/usage/#log-channels" />
  72. ),
  73. }
  74. )}
  75. </p>
  76. ),
  77. },
  78. {
  79. type: StepType.CONFIGURE,
  80. configurations: [
  81. {
  82. description: t('Configure the Sentry DSN with this command:'),
  83. language: 'shell',
  84. code: `php artisan sentry:publish --dsn=${dsn}`,
  85. },
  86. {
  87. description: (
  88. <p>
  89. {tct(
  90. 'It creates the config file ([sentryPHPCode:config/sentry.php]) and adds the [dsnCode:DSN] to your ".env" file.',
  91. {dsnCode: <code />, sentryPHPCode: <code />}
  92. )}
  93. </p>
  94. ),
  95. language: 'shell',
  96. code: `SENTRY_LARAVEL_DSN=${dsn}`,
  97. },
  98. ],
  99. },
  100. {
  101. type: StepType.VERIFY,
  102. configurations: [
  103. {
  104. description: <h5>{t('Verify With Artisan')}</h5>,
  105. configurations: [
  106. {
  107. description: (
  108. <p>
  109. {tct(
  110. 'You can test your configuration using the provided [code:sentry:test] artisan command:',
  111. {
  112. code: <code />,
  113. }
  114. )}
  115. </p>
  116. ),
  117. language: 'shell',
  118. code: 'php artisan sentry:test',
  119. },
  120. ],
  121. },
  122. {
  123. description: <h5>{t('Verify With Code')}</h5>,
  124. configurations: [
  125. {
  126. description: t(
  127. 'You can verify that Sentry is capturing errors in your Laravel application by creating a route that will throw an exception:'
  128. ),
  129. language: 'php',
  130. code: `
  131. Route::get('/debug-sentry', function () {
  132. throw new Exception('My first Sentry error!');
  133. });
  134. `,
  135. additionalInfo: t(
  136. 'Visiting this route will trigger an exception that will be captured by Sentry.'
  137. ),
  138. },
  139. ],
  140. },
  141. ],
  142. },
  143. {
  144. title: t('Performance Monitoring'),
  145. configurations: [
  146. {
  147. description: (
  148. <p>
  149. {tct(
  150. '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.',
  151. {
  152. tracesSampleRateCode: <code />,
  153. sentryPhpCode: <code />,
  154. sentryTracesSampleRateCode: <code />,
  155. }
  156. )}
  157. </p>
  158. ),
  159. language: 'shell',
  160. code: `
  161. # Be sure to lower this value in production otherwise you could burn through your quota quickly.
  162. SENTRY_TRACES_SAMPLE_RATE=1.0
  163. `,
  164. additionalInfo: (
  165. <Fragment>
  166. {t(
  167. '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.'
  168. )}
  169. <p>
  170. {tct(
  171. '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].',
  172. {
  173. usingSampleToFilterLink: (
  174. <ExternalLink href="https://docs.sentry.io/platforms/php/guides/laravel/configuration/filtering/#using-sampling-to-filter-transaction-events" />
  175. ),
  176. }
  177. )}
  178. </p>
  179. <p>
  180. {tct(
  181. "Performance data is transmitted using a new event type called 'transactions', which you can learn about in Distributed Tracing.",
  182. {
  183. distributedTracingLink: (
  184. <ExternalLink href="https://docs.sentry.io/product/sentry-basics/tracing/distributed-tracing/#traces-transactions-and-spans" />
  185. ),
  186. }
  187. )}
  188. </p>
  189. </Fragment>
  190. ),
  191. },
  192. ],
  193. },
  194. {
  195. title: t('Local Development and Testing'),
  196. description: (
  197. <Fragment>
  198. {t(
  199. 'When Sentry is installed in your application, it will also be active when you are developing or running tests.'
  200. )}
  201. <p>
  202. {tct(
  203. "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.",
  204. {
  205. code: <code />,
  206. }
  207. )}
  208. </p>
  209. <p>
  210. {tct(
  211. '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].',
  212. {
  213. sentryLaravelDsnNullCode: <code />,
  214. envCode: <code />,
  215. sentryLaravelDsnCode: <code />,
  216. }
  217. )}
  218. </p>
  219. <p>
  220. {t(
  221. "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."
  222. )}
  223. </p>
  224. </Fragment>
  225. ),
  226. },
  227. ];
  228. // Configuration End
  229. export function GettingStartedWithLaravel({dsn, ...props}: ModuleProps) {
  230. return <Layout steps={steps({dsn})} introduction={introduction} {...props} />;
  231. }
  232. export default GettingStartedWithLaravel;