@danieljvdm/dev-kit 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/package.json +1 -1
- package/skill-sources.jsonc +2 -33
- package/skill-sources.lock.json +15 -117
- package/skills/animate/LICENSE +21 -0
- package/skills/animate/NOTICE +10 -0
- package/skills/animate/SKILL.md +34 -0
- package/skills/animate/references/gestures.md +27 -0
- package/skills/animate/references/glossary.md +136 -0
- package/skills/animate/references/implementation.md +22 -0
- package/skills/animate/references/opportunities.md +18 -0
- package/skills/animate/references/principles.md +48 -0
- package/skills/animate/references/review.md +19 -0
- package/skills/cloudflare-workers/LICENSE +202 -0
- package/skills/cloudflare-workers/NOTICE +9 -0
- package/skills/cloudflare-workers/SKILL.md +26 -0
- package/skills/cloudflare-workers/references/durable-objects.md +68 -0
- package/skills/cloudflare-workers/references/sandbox.md +48 -0
- package/skills/cloudflare-workers/references/workers.md +63 -0
- package/skills/cloudflare-workers/references/wrangler.md +56 -0
- package/skills/design-ui/LICENSE +21 -0
- package/skills/design-ui/NOTICE +8 -0
- package/skills/design-ui/SKILL.md +29 -0
- package/skills/design-ui/references/appearance.md +22 -0
- package/skills/design-ui/references/components.md +33 -0
- package/skills/design-ui/references/exploration.md +50 -0
- package/skills/design-ui/references/libraries.md +39 -0
- package/skills/design-ui/references/themes.md +23 -0
- package/skills/dev-kit/SKILL.md +19 -38
- package/skills/dev-kit/references/cloudflare-worker-api.md +1 -1
- package/skills/dev-kit/references/skills.md +2 -2
- package/skills/effect-development/SKILL.md +27 -0
- package/skills/effect-development/agents/openai.yaml +4 -0
- package/skills/effect-development/references/api/index.md +32 -0
- package/skills/effect-development/references/api/schema-codecs.md +15 -0
- package/skills/{build-effect-apis/references → effect-development/references/api}/verification.md +10 -5
- package/skills/{effect-architecture-audit/SKILL.md → effect-development/references/architecture/index.md} +1 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-client.md +8 -6
- package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-testing.md +7 -2
- package/skills/effect-development/references/atom/index.md +40 -0
- package/skills/{build-effect-clis/references → effect-development/references/cli}/entrypoints-and-testing.md +6 -2
- package/skills/effect-development/references/cli/index.md +39 -0
- package/skills/effect-development/references/setup.md +15 -0
- package/skills/open-pull-request/SKILL.md +10 -70
- package/skills/open-pull-request/references/evidence.md +22 -0
- package/skills/open-pull-request/references/explanation.md +21 -0
- package/skills/open-pull-request/references/publication.md +21 -0
- package/skills/sentry/LICENSE +202 -0
- package/skills/sentry/LICENSE-UPSTREAM +21 -0
- package/skills/sentry/NOTICE +14 -0
- package/skills/sentry/SKILL.md +33 -0
- package/skills/sentry/references/alert-payloads.md +105 -0
- package/skills/sentry/references/alerts.md +17 -0
- package/skills/sentry/references/artifacts.md +25 -0
- package/skills/sentry/references/auth-token.md +65 -0
- package/skills/sentry/references/concepts/ai-monitoring.md +131 -0
- package/skills/sentry/references/concepts/choosing-a-signal.md +78 -0
- package/skills/sentry/references/concepts/crons.md +50 -0
- package/skills/sentry/references/concepts/data-scrubbing.md +43 -0
- package/skills/sentry/references/concepts/errors.md +40 -0
- package/skills/sentry/references/concepts/logging.md +85 -0
- package/skills/sentry/references/concepts/metrics.md +49 -0
- package/skills/sentry/references/concepts/monitors.md +78 -0
- package/skills/sentry/references/concepts/profiling.md +38 -0
- package/skills/sentry/references/concepts/reduce-volume.md +49 -0
- package/skills/sentry/references/concepts/releases.md +43 -0
- package/skills/sentry/references/concepts/session-replay.md +35 -0
- package/skills/sentry/references/concepts/tracing.md +54 -0
- package/skills/sentry/references/concepts/user-feedback.md +36 -0
- package/skills/sentry/references/debug-artifacts/android.md +68 -0
- package/skills/sentry/references/debug-artifacts/apple.md +96 -0
- package/skills/sentry/references/debug-artifacts/dotnet.md +70 -0
- package/skills/sentry/references/debug-artifacts/flutter.md +65 -0
- package/skills/sentry/references/debug-artifacts/index.md +75 -0
- package/skills/sentry/references/debug-artifacts/javascript.md +94 -0
- package/skills/sentry/references/debug-artifacts/matching.md +73 -0
- package/skills/sentry/references/debug-artifacts/react-native.md +75 -0
- package/skills/sentry/references/first-error-setup.md +25 -0
- package/skills/sentry/references/instrumentation.md +30 -0
- package/skills/sentry/references/issues.md +32 -0
- package/skills/sentry/references/new-project.md +17 -0
- package/skills/sentry/references/otel-exporter.md +30 -0
- package/skills/sentry/references/release-workflow.md +31 -0
- package/skills/sentry/references/releases/ci-pipeline.md +214 -0
- package/skills/sentry/references/releases/index.md +93 -0
- package/skills/sentry/references/releases/suspect-commits.md +155 -0
- package/skills/sentry/references/releases/tagging.md +131 -0
- package/skills/sentry/references/releases/troubleshooting.md +67 -0
- package/skills/sentry/references/sdks/android/crons.md +305 -0
- package/skills/sentry/references/sdks/android/error-monitoring.md +800 -0
- package/skills/sentry/references/sdks/android/index.md +748 -0
- package/skills/sentry/references/sdks/android/integrations.md +48 -0
- package/skills/sentry/references/sdks/android/logging.md +374 -0
- package/skills/sentry/references/sdks/android/metrics.md +288 -0
- package/skills/sentry/references/sdks/android/profiling.md +397 -0
- package/skills/sentry/references/sdks/android/session-replay.md +406 -0
- package/skills/sentry/references/sdks/android/tracing.md +861 -0
- package/skills/sentry/references/sdks/browser/error-monitoring.md +861 -0
- package/skills/sentry/references/sdks/browser/index.md +714 -0
- package/skills/sentry/references/sdks/browser/logging.md +315 -0
- package/skills/sentry/references/sdks/browser/profiling.md +236 -0
- package/skills/sentry/references/sdks/browser/session-replay.md +586 -0
- package/skills/sentry/references/sdks/browser/tracing.md +561 -0
- package/skills/sentry/references/sdks/browser/user-feedback.md +354 -0
- package/skills/sentry/references/sdks/cloudflare/ai-monitoring.md +661 -0
- package/skills/sentry/references/sdks/cloudflare/crons.md +231 -0
- package/skills/sentry/references/sdks/cloudflare/durable-objects.md +381 -0
- package/skills/sentry/references/sdks/cloudflare/error-monitoring.md +329 -0
- package/skills/sentry/references/sdks/cloudflare/index.md +698 -0
- package/skills/sentry/references/sdks/cloudflare/logging.md +169 -0
- package/skills/sentry/references/sdks/cloudflare/nodejs-compat.md +134 -0
- package/skills/sentry/references/sdks/cloudflare/tracing.md +475 -0
- package/skills/sentry/references/sdks/cocoa/error-monitoring.md +394 -0
- package/skills/sentry/references/sdks/cocoa/index.md +497 -0
- package/skills/sentry/references/sdks/cocoa/logging.md +209 -0
- package/skills/sentry/references/sdks/cocoa/metrics.md +136 -0
- package/skills/sentry/references/sdks/cocoa/profiling.md +223 -0
- package/skills/sentry/references/sdks/cocoa/session-replay.md +257 -0
- package/skills/sentry/references/sdks/cocoa/tracing.md +524 -0
- package/skills/sentry/references/sdks/cocoa/user-feedback.md +310 -0
- package/skills/sentry/references/sdks/dotnet/crons.md +465 -0
- package/skills/sentry/references/sdks/dotnet/error-monitoring.md +1100 -0
- package/skills/sentry/references/sdks/dotnet/index.md +614 -0
- package/skills/sentry/references/sdks/dotnet/logging.md +556 -0
- package/skills/sentry/references/sdks/dotnet/metrics.md +229 -0
- package/skills/sentry/references/sdks/dotnet/profiling.md +296 -0
- package/skills/sentry/references/sdks/dotnet/tracing.md +897 -0
- package/skills/sentry/references/sdks/elixir/crons.md +371 -0
- package/skills/sentry/references/sdks/elixir/error-monitoring.md +335 -0
- package/skills/sentry/references/sdks/elixir/index.md +383 -0
- package/skills/sentry/references/sdks/elixir/logging.md +239 -0
- package/skills/sentry/references/sdks/elixir/tracing.md +233 -0
- package/skills/sentry/references/sdks/flutter/ecosystem-integrations.md +70 -0
- package/skills/sentry/references/sdks/flutter/error-monitoring.md +312 -0
- package/skills/sentry/references/sdks/flutter/index.md +728 -0
- package/skills/sentry/references/sdks/flutter/logging.md +387 -0
- package/skills/sentry/references/sdks/flutter/metrics.md +310 -0
- package/skills/sentry/references/sdks/flutter/profiling.md +214 -0
- package/skills/sentry/references/sdks/flutter/session-replay.md +308 -0
- package/skills/sentry/references/sdks/flutter/tracing.md +502 -0
- package/skills/sentry/references/sdks/go/crons.md +270 -0
- package/skills/sentry/references/sdks/go/error-monitoring.md +361 -0
- package/skills/sentry/references/sdks/go/index.md +324 -0
- package/skills/sentry/references/sdks/go/logging.md +354 -0
- package/skills/sentry/references/sdks/go/metrics.md +273 -0
- package/skills/sentry/references/sdks/go/profiling.md +46 -0
- package/skills/sentry/references/sdks/go/tracing.md +366 -0
- package/skills/sentry/references/sdks/index.md +41 -0
- package/skills/sentry/references/sdks/nestjs/ai-monitoring.md +410 -0
- package/skills/sentry/references/sdks/nestjs/crons.md +268 -0
- package/skills/sentry/references/sdks/nestjs/error-monitoring.md +729 -0
- package/skills/sentry/references/sdks/nestjs/index.md +699 -0
- package/skills/sentry/references/sdks/nestjs/logging.md +174 -0
- package/skills/sentry/references/sdks/nestjs/metrics.md +243 -0
- package/skills/sentry/references/sdks/nestjs/profiling.md +127 -0
- package/skills/sentry/references/sdks/nestjs/tracing.md +762 -0
- package/skills/sentry/references/sdks/nextjs/ai-monitoring.md +494 -0
- package/skills/sentry/references/sdks/nextjs/crons.md +383 -0
- package/skills/sentry/references/sdks/nextjs/error-monitoring.md +974 -0
- package/skills/sentry/references/sdks/nextjs/index.md +491 -0
- package/skills/sentry/references/sdks/nextjs/logging.md +381 -0
- package/skills/sentry/references/sdks/nextjs/metrics.md +411 -0
- package/skills/sentry/references/sdks/nextjs/profiling.md +403 -0
- package/skills/sentry/references/sdks/nextjs/session-replay.md +462 -0
- package/skills/sentry/references/sdks/nextjs/tracing.md +628 -0
- package/skills/sentry/references/sdks/node/ai-monitoring.md +303 -0
- package/skills/sentry/references/sdks/node/crons.md +432 -0
- package/skills/sentry/references/sdks/node/error-monitoring.md +1125 -0
- package/skills/sentry/references/sdks/node/index.md +942 -0
- package/skills/sentry/references/sdks/node/logging.md +380 -0
- package/skills/sentry/references/sdks/node/metrics.md +278 -0
- package/skills/sentry/references/sdks/node/profiling.md +373 -0
- package/skills/sentry/references/sdks/node/tracing.md +878 -0
- package/skills/sentry/references/sdks/php/ai-monitoring.md +310 -0
- package/skills/sentry/references/sdks/php/crons.md +265 -0
- package/skills/sentry/references/sdks/php/error-monitoring.md +626 -0
- package/skills/sentry/references/sdks/php/index.md +362 -0
- package/skills/sentry/references/sdks/php/laravel.md +542 -0
- package/skills/sentry/references/sdks/php/logging.md +242 -0
- package/skills/sentry/references/sdks/php/metrics.md +193 -0
- package/skills/sentry/references/sdks/php/profiling.md +115 -0
- package/skills/sentry/references/sdks/php/symfony.md +552 -0
- package/skills/sentry/references/sdks/php/tracing.md +516 -0
- package/skills/sentry/references/sdks/python/ai-monitoring.md +351 -0
- package/skills/sentry/references/sdks/python/crons.md +218 -0
- package/skills/sentry/references/sdks/python/error-monitoring.md +292 -0
- package/skills/sentry/references/sdks/python/index.md +361 -0
- package/skills/sentry/references/sdks/python/logging.md +234 -0
- package/skills/sentry/references/sdks/python/metrics.md +154 -0
- package/skills/sentry/references/sdks/python/profiling.md +120 -0
- package/skills/sentry/references/sdks/python/tracing.md +364 -0
- package/skills/sentry/references/sdks/react/error-monitoring.md +1607 -0
- package/skills/sentry/references/sdks/react/index.md +492 -0
- package/skills/sentry/references/sdks/react/logging.md +364 -0
- package/skills/sentry/references/sdks/react/profiling.md +322 -0
- package/skills/sentry/references/sdks/react/react-features.md +1272 -0
- package/skills/sentry/references/sdks/react/session-replay.md +1193 -0
- package/skills/sentry/references/sdks/react/tracing.md +1415 -0
- package/skills/sentry/references/sdks/react-native/error-monitoring.md +1481 -0
- package/skills/sentry/references/sdks/react-native/expo-config-plugin.md +45 -0
- package/skills/sentry/references/sdks/react-native/index.md +1030 -0
- package/skills/sentry/references/sdks/react-native/logging.md +444 -0
- package/skills/sentry/references/sdks/react-native/profiling.md +386 -0
- package/skills/sentry/references/sdks/react-native/session-replay.md +704 -0
- package/skills/sentry/references/sdks/react-native/tracing.md +1086 -0
- package/skills/sentry/references/sdks/react-native/user-feedback.md +815 -0
- package/skills/sentry/references/sdks/react-router-framework/error-monitoring.md +127 -0
- package/skills/sentry/references/sdks/react-router-framework/index.md +411 -0
- package/skills/sentry/references/sdks/react-router-framework/logging.md +66 -0
- package/skills/sentry/references/sdks/react-router-framework/profiling.md +57 -0
- package/skills/sentry/references/sdks/react-router-framework/react-router-framework-features.md +110 -0
- package/skills/sentry/references/sdks/react-router-framework/session-replay.md +67 -0
- package/skills/sentry/references/sdks/react-router-framework/tracing.md +96 -0
- package/skills/sentry/references/sdks/react-router-framework/user-feedback.md +71 -0
- package/skills/sentry/references/sdks/ruby/crons.md +184 -0
- package/skills/sentry/references/sdks/ruby/error-monitoring.md +248 -0
- package/skills/sentry/references/sdks/ruby/index.md +297 -0
- package/skills/sentry/references/sdks/ruby/logging.md +168 -0
- package/skills/sentry/references/sdks/ruby/metrics.md +196 -0
- package/skills/sentry/references/sdks/ruby/migration.md +321 -0
- package/skills/sentry/references/sdks/ruby/profiling.md +107 -0
- package/skills/sentry/references/sdks/ruby/tracing.md +388 -0
- package/skills/sentry/references/sdks/svelte/error-monitoring.md +456 -0
- package/skills/sentry/references/sdks/svelte/index.md +467 -0
- package/skills/sentry/references/sdks/svelte/logging.md +344 -0
- package/skills/sentry/references/sdks/svelte/session-replay.md +369 -0
- package/skills/sentry/references/sdks/svelte/tracing.md +406 -0
- package/skills/sentry/references/sdks/tanstack-start/error-monitoring.md +149 -0
- package/skills/sentry/references/sdks/tanstack-start/index.md +381 -0
- package/skills/sentry/references/sdks/tanstack-start/logging.md +74 -0
- package/skills/sentry/references/sdks/tanstack-start/session-replay.md +76 -0
- package/skills/sentry/references/sdks/tanstack-start/tanstackstart-features.md +128 -0
- package/skills/sentry/references/sdks/tanstack-start/tracing.md +123 -0
- package/skills/sentry/references/sdks/tanstack-start/user-feedback.md +81 -0
- package/skills/sentry/references/search-query-language.md +226 -0
- package/skills/sentry/references/semantics/angular.md +7 -0
- package/skills/sentry/references/semantics/app.md +28 -0
- package/skills/sentry/references/semantics/art.md +17 -0
- package/skills/sentry/references/semantics/aws.md +43 -0
- package/skills/sentry/references/semantics/browser.md +34 -0
- package/skills/sentry/references/semantics/cache.md +12 -0
- package/skills/sentry/references/semantics/client.md +8 -0
- package/skills/sentry/references/semantics/cloud.md +12 -0
- package/skills/sentry/references/semantics/cloudflare.md +23 -0
- package/skills/sentry/references/semantics/code.md +11 -0
- package/skills/sentry/references/semantics/culture.md +11 -0
- package/skills/sentry/references/semantics/db.md +21 -0
- package/skills/sentry/references/semantics/device.md +43 -0
- package/skills/sentry/references/semantics/error.md +7 -0
- package/skills/sentry/references/semantics/event.md +8 -0
- package/skills/sentry/references/semantics/exception.md +10 -0
- package/skills/sentry/references/semantics/faas.md +19 -0
- package/skills/sentry/references/semantics/file.md +8 -0
- package/skills/sentry/references/semantics/flag.md +7 -0
- package/skills/sentry/references/semantics/gcp.md +16 -0
- package/skills/sentry/references/semantics/gen_ai.md +53 -0
- package/skills/sentry/references/semantics/general.md +11 -0
- package/skills/sentry/references/semantics/graphql.md +9 -0
- package/skills/sentry/references/semantics/grpc.md +19 -0
- package/skills/sentry/references/semantics/http.md +34 -0
- package/skills/sentry/references/semantics/index.md +63 -0
- package/skills/sentry/references/semantics/jsonrpc.md +8 -0
- package/skills/sentry/references/semantics/jvm.md +12 -0
- package/skills/sentry/references/semantics/koa.md +7 -0
- package/skills/sentry/references/semantics/logger.md +7 -0
- package/skills/sentry/references/semantics/mcp.md +37 -0
- package/skills/sentry/references/semantics/mdc.md +7 -0
- package/skills/sentry/references/semantics/messaging.md +23 -0
- package/skills/sentry/references/semantics/middleware.md +7 -0
- package/skills/sentry/references/semantics/navigation.md +9 -0
- package/skills/sentry/references/semantics/nel.md +11 -0
- package/skills/sentry/references/semantics/network.md +17 -0
- package/skills/sentry/references/semantics/os.md +15 -0
- package/skills/sentry/references/semantics/otel.md +10 -0
- package/skills/sentry/references/semantics/params.md +7 -0
- package/skills/sentry/references/semantics/process.md +14 -0
- package/skills/sentry/references/semantics/react.md +7 -0
- package/skills/sentry/references/semantics/remix.md +7 -0
- package/skills/sentry/references/semantics/resource.md +7 -0
- package/skills/sentry/references/semantics/rpc.md +10 -0
- package/skills/sentry/references/semantics/score.md +10 -0
- package/skills/sentry/references/semantics/sentry.md +69 -0
- package/skills/sentry/references/semantics/server.md +8 -0
- package/skills/sentry/references/semantics/service.md +8 -0
- package/skills/sentry/references/semantics/session.md +7 -0
- package/skills/sentry/references/semantics/state.md +7 -0
- package/skills/sentry/references/semantics/thread.md +8 -0
- package/skills/sentry/references/semantics/timber.md +7 -0
- package/skills/sentry/references/semantics/trpc.md +8 -0
- package/skills/sentry/references/semantics/ui.md +18 -0
- package/skills/sentry/references/semantics/url.md +15 -0
- package/skills/sentry/references/semantics/user.md +17 -0
- package/skills/sentry/references/semantics/user_agent.md +7 -0
- package/skills/sentry/references/semantics/vercel.md +42 -0
- package/skills/sentry/references/setup-verification.md +39 -0
- package/skills/sentry/references/snapshots/github-actions-fanout.md +206 -0
- package/skills/sentry/references/snapshots/github-actions-simple.md +102 -0
- package/skills/sentry/references/snapshots/github-actions-swift-snapshot-testing.md +118 -0
- package/skills/sentry/references/snapshots/index.md +19 -0
- package/skills/sentry/references/snapshots/snapshot-previews.md +100 -0
- package/skills/sentry/references/snapshots/snapshots.md +123 -0
- package/skills/sentry/references/snapshots/wizard-setup.md +134 -0
- package/skills/testing/LICENSE +21 -0
- package/skills/testing/NOTICE +7 -0
- package/skills/testing/SKILL.md +13 -19
- package/skills/testing/agents/openai.yaml +1 -2
- package/skills/testing/references/selection.md +23 -0
- package/skills/testing/references/tdd.md +19 -0
- package/skills/testing/references/test-design.md +17 -0
- package/src/catalog.ts +1 -7
- package/skills/build-effect-apis/SKILL.md +0 -81
- package/skills/build-effect-apis/agents/openai.yaml +0 -4
- package/skills/build-effect-clis/SKILL.md +0 -92
- package/skills/build-effect-clis/agents/openai.yaml +0 -4
- package/skills/effect-architecture-audit/agents/openai.yaml +0 -4
- package/skills/effect-atom-state/SKILL.md +0 -97
- package/skills/effect-atom-state/agents/openai.yaml +0 -4
- package/skills/effect-ts/SKILL.md +0 -35
- package/skills/effect-ts/agents/openai.yaml +0 -4
- /package/skills/{build-effect-apis/references → effect-development/references/api}/cloudflare-workers.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/runtime-assembly.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/server-and-middleware.md +0 -0
- /package/skills/{build-effect-apis/references → effect-development/references/api}/shared-contracts.md +0 -0
- /package/skills/{effect-architecture-audit/references → effect-development/references/architecture}/service-and-boundary-audit.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-lifecycle.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/effect-atom-workflows.md +0 -0
- /package/skills/{effect-atom-state/references → effect-development/references/atom}/tanstack-start.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/command-design.md +0 -0
- /package/skills/{build-effect-clis/references → effect-development/references/cli}/processes-and-platform.md +0 -0
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# Sentry Go SDK
|
|
2
|
+
|
|
3
|
+
Opinionated wizard that scans your Go project and guides you through complete Sentry
|
|
4
|
+
setup.
|
|
5
|
+
|
|
6
|
+
> **Note:** SDK versions and APIs below reflect Sentry docs at time of writing
|
|
7
|
+
> (sentry-go v0.43.0+). As of v0.33.0+, the SDK requires **Go 1.25 or later** (supports
|
|
8
|
+
> the two most recent Go major versions).
|
|
9
|
+
> Always verify against
|
|
10
|
+
> [docs.sentry.io/platforms/go/](https://docs.sentry.io/platforms/go/) before
|
|
11
|
+
> implementing.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Phase 1: Detect
|
|
16
|
+
|
|
17
|
+
Run these commands to understand the project before making any recommendations:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Check existing Sentry dependency
|
|
21
|
+
grep -i sentry go.mod 2>/dev/null
|
|
22
|
+
|
|
23
|
+
# Detect web framework
|
|
24
|
+
grep -E "gin-gonic/gin|labstack/echo|gofiber/fiber|valyala/fasthttp|kataras/iris|urfave/negroni" go.mod 2>/dev/null
|
|
25
|
+
|
|
26
|
+
# Detect gRPC
|
|
27
|
+
grep "google.golang.org/grpc" go.mod 2>/dev/null
|
|
28
|
+
|
|
29
|
+
# Detect logging libraries
|
|
30
|
+
grep -E "sirupsen/logrus|go.uber.org/zap|rs/zerolog|log/slog" go.mod go.sum 2>/dev/null
|
|
31
|
+
|
|
32
|
+
# Detect cron / scheduler patterns
|
|
33
|
+
grep -E "robfig/cron|go-co-op/gocron|jasonlvhit/gocron" go.mod 2>/dev/null
|
|
34
|
+
|
|
35
|
+
# Detect OpenTelemetry usage
|
|
36
|
+
grep "go.opentelemetry.io" go.mod 2>/dev/null
|
|
37
|
+
|
|
38
|
+
# Check for companion frontend
|
|
39
|
+
ls frontend/ web/ client/ ui/ 2>/dev/null
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**What to note:**
|
|
43
|
+
|
|
44
|
+
- Is `sentry-go` already in `go.mod`? If yes, skip to Phase 2 (configure features).
|
|
45
|
+
- Which framework is used?
|
|
46
|
+
(Determines which sub-package and middleware to install.)
|
|
47
|
+
- Which logging library?
|
|
48
|
+
(Enables automatic log capture.)
|
|
49
|
+
- Are cron/scheduler patterns present?
|
|
50
|
+
(Triggers Crons recommendation.)
|
|
51
|
+
- Is there a companion frontend directory?
|
|
52
|
+
(Triggers Phase 4 cross-link.)
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Phase 2: Recommend
|
|
57
|
+
|
|
58
|
+
Based on what you found, present a concrete recommendation.
|
|
59
|
+
Don’t ask open-ended questions — lead with a proposal:
|
|
60
|
+
|
|
61
|
+
**Recommended (core coverage):**
|
|
62
|
+
|
|
63
|
+
- ✅ **Error Monitoring** — always; captures panics and unhandled errors
|
|
64
|
+
- ✅ **Tracing** — if HTTP handlers, gRPC, or DB calls are detected
|
|
65
|
+
- ✅ **Logging** — if logrus, zap, zerolog, or slog is detected
|
|
66
|
+
|
|
67
|
+
**Optional (enhanced observability):**
|
|
68
|
+
|
|
69
|
+
- ⚡ **Metrics** — custom counters and gauges for business KPIs / SLOs
|
|
70
|
+
- ⚡ **Crons** — detect silent failures in scheduled jobs
|
|
71
|
+
- ⚠️ **Profiling** — removed in sentry-go v0.31.0; see `./profiling.md` for alternatives
|
|
72
|
+
|
|
73
|
+
**Recommendation logic:**
|
|
74
|
+
|
|
75
|
+
| Feature | Recommend when … |
|
|
76
|
+
| ---------------- | ------------------------------------------------------------------ |
|
|
77
|
+
| Error Monitoring | **Always** — non-negotiable baseline |
|
|
78
|
+
| Tracing | `net/http`, gin, echo, fiber, gRPC, or DB calls detected |
|
|
79
|
+
| Logging | logrus, zap, zerolog, or `log/slog` imports detected |
|
|
80
|
+
| Metrics | Business events, SLO tracking, or counters needed |
|
|
81
|
+
| Crons | `robfig/cron`, `gocron`, or scheduled job patterns detected |
|
|
82
|
+
| Profiling | ⚠️ **Removed in v0.31.0** — do not recommend; see `./profiling.md` |
|
|
83
|
+
|
|
84
|
+
Propose: _“I recommend setting up Error Monitoring + Tracing [+ Logging if applicable].
|
|
85
|
+
Want me to also add Metrics or Crons?”_
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Phase 3: Guide
|
|
90
|
+
|
|
91
|
+
### Install
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
# Core SDK (always required)
|
|
95
|
+
go get github.com/getsentry/sentry-go
|
|
96
|
+
|
|
97
|
+
# Framework sub-package — install only what matches detected framework:
|
|
98
|
+
go get github.com/getsentry/sentry-go/http # net/http
|
|
99
|
+
go get github.com/getsentry/sentry-go/gin # Gin
|
|
100
|
+
go get github.com/getsentry/sentry-go/echo # Echo
|
|
101
|
+
go get github.com/getsentry/sentry-go/fiber # Fiber
|
|
102
|
+
go get github.com/getsentry/sentry-go/fasthttp # FastHTTP
|
|
103
|
+
|
|
104
|
+
# Logging sub-packages — install only what matches detected logging lib:
|
|
105
|
+
go get github.com/getsentry/sentry-go/logrus # Logrus
|
|
106
|
+
go get github.com/getsentry/sentry-go/slog # slog (stdlib, Go 1.21+)
|
|
107
|
+
go get github.com/getsentry/sentry-go/zap # Zap
|
|
108
|
+
go get github.com/getsentry/sentry-go/zerolog # Zerolog
|
|
109
|
+
|
|
110
|
+
# gRPC interceptors (only if google.golang.org/grpc is detected):
|
|
111
|
+
go get github.com/getsentry/sentry-go/grpc
|
|
112
|
+
|
|
113
|
+
# OpenTelemetry bridge (only if OTel is already in use):
|
|
114
|
+
go get github.com/getsentry/sentry-go/otel
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Quick Start — Recommended Init
|
|
118
|
+
|
|
119
|
+
Add to `main()` before any other code.
|
|
120
|
+
This config enables the most features with sensible defaults:
|
|
121
|
+
|
|
122
|
+
```go
|
|
123
|
+
import (
|
|
124
|
+
"log"
|
|
125
|
+
"os"
|
|
126
|
+
"time"
|
|
127
|
+
"github.com/getsentry/sentry-go"
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
err := sentry.Init(sentry.ClientOptions{
|
|
131
|
+
Dsn: os.Getenv("SENTRY_DSN"),
|
|
132
|
+
Environment: os.Getenv("SENTRY_ENVIRONMENT"), // "production", "staging", etc.
|
|
133
|
+
Release: release, // inject via -ldflags at build time
|
|
134
|
+
SendDefaultPII: true,
|
|
135
|
+
AttachStacktrace: true,
|
|
136
|
+
|
|
137
|
+
// Tracing (adjust sample rate for production)
|
|
138
|
+
EnableTracing: true,
|
|
139
|
+
TracesSampleRate: 1.0, // lower to 0.1–0.2 in high-traffic production
|
|
140
|
+
|
|
141
|
+
// Logs
|
|
142
|
+
EnableLogs: true,
|
|
143
|
+
})
|
|
144
|
+
if err != nil {
|
|
145
|
+
log.Fatalf("sentry.Init: %s", err)
|
|
146
|
+
}
|
|
147
|
+
defer sentry.Flush(2 * time.Second)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Injecting `Release` at build time (recommended):**
|
|
151
|
+
|
|
152
|
+
```go
|
|
153
|
+
var release string // set by -ldflags
|
|
154
|
+
|
|
155
|
+
// go build -ldflags="-X main.release=my-app@$(git describe --tags)"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Framework Middleware
|
|
159
|
+
|
|
160
|
+
After `sentry.Init`, register the Sentry middleware for your framework:
|
|
161
|
+
|
|
162
|
+
| Framework | Import path | Middleware call | `Repanic` | `WaitForDelivery` |
|
|
163
|
+
| ---------- | ------------------------ | ------------------------------------ | --------- | ----------------- |
|
|
164
|
+
| `net/http` | `.../sentry-go/http` | `sentryhttp.New(opts).Handle(h)` | `true` | `false` |
|
|
165
|
+
| Gin | `.../sentry-go/gin` | `router.Use(sentrygin.New(opts))` | `true` | `false` |
|
|
166
|
+
| Echo | `.../sentry-go/echo` | `e.Use(sentryecho.New(opts))` | `true` | `false` |
|
|
167
|
+
| Fiber | `.../sentry-go/fiber` | `app.Use(sentryfiber.New(opts))` | `false` | `true` |
|
|
168
|
+
| FastHTTP | `.../sentry-go/fasthttp` | `sentryfasthttp.New(opts).Handle(h)` | `false` | `true` |
|
|
169
|
+
| Iris | `.../sentry-go/iris` | `app.Use(sentryiris.New(opts))` | `true` | `false` |
|
|
170
|
+
| Negroni | `.../sentry-go/negroni` | `n.Use(sentrynegroni.New(opts))` | `true` | `false` |
|
|
171
|
+
|
|
172
|
+
> **Note:** Fiber and FastHTTP are built on `valyala/fasthttp` which has no built-in
|
|
173
|
+
> recovery. Use `Repanic: false, WaitForDelivery: true` for those.
|
|
174
|
+
|
|
175
|
+
**Hub access in handlers:**
|
|
176
|
+
|
|
177
|
+
```go
|
|
178
|
+
// net/http, Negroni:
|
|
179
|
+
hub := sentry.GetHubFromContext(r.Context())
|
|
180
|
+
|
|
181
|
+
// Gin:
|
|
182
|
+
hub := sentrygin.GetHubFromContext(c)
|
|
183
|
+
|
|
184
|
+
// Echo:
|
|
185
|
+
hub := sentryecho.GetHubFromContext(c)
|
|
186
|
+
|
|
187
|
+
// Fiber:
|
|
188
|
+
hub := sentryfiber.GetHubFromContext(c)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### gRPC Integration
|
|
192
|
+
|
|
193
|
+
For gRPC servers and clients, use the `sentrygrpc` interceptors instead:
|
|
194
|
+
|
|
195
|
+
```go
|
|
196
|
+
import sentrygrpc "github.com/getsentry/sentry-go/grpc"
|
|
197
|
+
|
|
198
|
+
// Server: register interceptors when creating the gRPC server
|
|
199
|
+
server := grpc.NewServer(
|
|
200
|
+
grpc.UnaryInterceptor(sentrygrpc.UnaryServerInterceptor()),
|
|
201
|
+
grpc.StreamInterceptor(sentrygrpc.StreamServerInterceptor()),
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
// Client: register interceptors when dialing
|
|
205
|
+
conn, err := grpc.NewClient(
|
|
206
|
+
address,
|
|
207
|
+
grpc.WithUnaryInterceptor(sentrygrpc.UnaryClientInterceptor()),
|
|
208
|
+
grpc.WithStreamInterceptor(sentrygrpc.StreamClientInterceptor()),
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
// Hub access inside a gRPC handler:
|
|
212
|
+
hub := sentry.GetHubFromContext(ctx)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### For Each Agreed Feature
|
|
216
|
+
|
|
217
|
+
Walk through features one at a time.
|
|
218
|
+
Load the reference file for each, follow its steps, and verify before moving to the
|
|
219
|
+
next:
|
|
220
|
+
|
|
221
|
+
| Feature | Reference file | Load when … |
|
|
222
|
+
| ---------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------- |
|
|
223
|
+
| Error Monitoring | `./error-monitoring.md` | Always (baseline) |
|
|
224
|
+
| Tracing | `./tracing.md` | HTTP handlers / distributed tracing |
|
|
225
|
+
| Profiling | `./profiling.md` | ⚠️ Not available — removed in v0.31.0; do not set up. Read the file only for pprof / third-party alternatives |
|
|
226
|
+
| Logging | `./logging.md` | logrus / zap / zerolog / slog detected |
|
|
227
|
+
| Metrics | `./metrics.md` | Business KPIs / SLO tracking |
|
|
228
|
+
| Crons | `./crons.md` | Scheduler / cron job patterns detected |
|
|
229
|
+
|
|
230
|
+
For each feature: `Read ./<feature>.md`, follow steps exactly, verify it works.
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Configuration Reference
|
|
235
|
+
|
|
236
|
+
### Key `ClientOptions` Fields
|
|
237
|
+
|
|
238
|
+
| Option | Type | Default | Purpose |
|
|
239
|
+
| ----------------------- | --------------- | ------- | ------------------------------------------------ |
|
|
240
|
+
| `Dsn` | `string` | `""` | SDK disabled if empty; env: `SENTRY_DSN` |
|
|
241
|
+
| `Environment` | `string` | `""` | e.g., `"production"`; env: `SENTRY_ENVIRONMENT` |
|
|
242
|
+
| `Release` | `string` | `""` | e.g., `"my-app@1.0.0"`; env: `SENTRY_RELEASE` |
|
|
243
|
+
| `SendDefaultPII` | `bool` | `false` | Include IP, request headers |
|
|
244
|
+
| `AttachStacktrace` | `bool` | `false` | Stack traces on `CaptureMessage` calls |
|
|
245
|
+
| `SampleRate` | `float64` | `1.0` | Error event sample rate (0.0 treated as 1.0) |
|
|
246
|
+
| `EnableTracing` | `bool` | `false` | Enable performance tracing |
|
|
247
|
+
| `TracesSampleRate` | `float64` | `0.0` | Transaction sample rate |
|
|
248
|
+
| `TracesSampler` | `TracesSampler` | `nil` | Custom per-transaction sampling (overrides rate) |
|
|
249
|
+
| `EnableLogs` | `bool` | `false` | Enable Sentry Logs feature |
|
|
250
|
+
| `MaxBreadcrumbs` | `int` | `100` | Max breadcrumbs per event |
|
|
251
|
+
| `MaxErrorDepth` | `int` | `100` | Max depth for unwrapping error chains |
|
|
252
|
+
| `Debug` | `bool` | `false` | Verbose SDK debug output |
|
|
253
|
+
| `BeforeSend` | `func` | `nil` | Hook to mutate/drop error events |
|
|
254
|
+
| `BeforeSendTransaction` | `func` | `nil` | Hook to mutate/drop transaction events |
|
|
255
|
+
| `IgnoreErrors` | `[]string` | `nil` | Regex patterns for errors to drop |
|
|
256
|
+
| `IgnoreTransactions` | `[]string` | `nil` | Regex patterns for transactions to drop |
|
|
257
|
+
|
|
258
|
+
### Environment Variables
|
|
259
|
+
|
|
260
|
+
| Variable | Maps to | Purpose |
|
|
261
|
+
| ---------------------------- | -------------------------- | ---------------------------------- |
|
|
262
|
+
| `SENTRY_DSN` | `Dsn` | Data Source Name |
|
|
263
|
+
| `SENTRY_RELEASE` | `Release` | App version (e.g., `my-app@1.0.0`) |
|
|
264
|
+
| `SENTRY_ENVIRONMENT` | `Environment` | Deployment environment |
|
|
265
|
+
| `HTTP_PROXY` / `HTTPS_PROXY` | `HTTPProxy` / `HTTPSProxy` | Outbound proxy |
|
|
266
|
+
|
|
267
|
+
Options set in `ClientOptions` **override** environment variables.
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Verification
|
|
272
|
+
|
|
273
|
+
Test that Sentry is receiving events:
|
|
274
|
+
|
|
275
|
+
```go
|
|
276
|
+
// In a handler or test — triggers a real error event:
|
|
277
|
+
sentry.CaptureMessage("Sentry Go SDK test")
|
|
278
|
+
|
|
279
|
+
// Or trigger a captured panic (with recovery middleware in place):
|
|
280
|
+
panic("sentry test panic")
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Check the Sentry dashboard within a few seconds.
|
|
284
|
+
If nothing appears:
|
|
285
|
+
|
|
286
|
+
1. Set `Debug: true` in `ClientOptions` — prints SDK internals to stdout
|
|
287
|
+
2. Verify the DSN is correct and the project exists
|
|
288
|
+
3. Ensure `sentry.Flush(2 * time.Second)` is called (events are async by default)
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Phase 4: Cross-Link
|
|
293
|
+
|
|
294
|
+
After completing Go setup, check for a companion frontend missing Sentry coverage:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
ls frontend/ web/ client/ ui/ 2>/dev/null
|
|
298
|
+
cat frontend/package.json web/package.json 2>/dev/null | grep -E '"react"|"svelte"|"vue"|"next"'
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
If a frontend directory exists without Sentry configured, suggest the matching skill:
|
|
302
|
+
|
|
303
|
+
| Frontend detected | Suggest skill |
|
|
304
|
+
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
305
|
+
| React / Next.js | [`react`](../react/index.md) |
|
|
306
|
+
| Svelte / SvelteKit | [`svelte`](../svelte/index.md) |
|
|
307
|
+
| Vue | Use `@sentry/vue` — see [docs.sentry.io/platforms/javascript/guides/vue/](https://docs.sentry.io/platforms/javascript/guides/vue/) |
|
|
308
|
+
| Other JS/TS | [`react`](../react/index.md) (covers generic browser JS patterns) |
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## Troubleshooting
|
|
313
|
+
|
|
314
|
+
| Issue | Solution |
|
|
315
|
+
| ------------------------------------ | --------------------------------------------------------------------------------------------- |
|
|
316
|
+
| Events not appearing | Set `Debug: true`, check DSN, verify `sentry.Flush()` is called |
|
|
317
|
+
| `sentry.Init` returns error | Malformed DSN — check format: `https://<key>@o<org>.ingest.sentry.io/<project>` |
|
|
318
|
+
| Panics not captured | Ensure framework middleware is registered before handlers |
|
|
319
|
+
| `defer sentry.Flush` not running | `os.Exit()` skips `defer` — call `sentry.Flush()` explicitly before `os.Exit()` |
|
|
320
|
+
| Missing stack traces | Set `AttachStacktrace: true` for `CaptureMessage`; works automatically for `CaptureException` |
|
|
321
|
+
| Goroutine events missing context | Clone hub before spawning goroutine: `hub := sentry.CurrentHub().Clone()` |
|
|
322
|
+
| Too many transactions | Lower `TracesSampleRate` or use `TracesSampler` to drop health checks / metrics endpoints |
|
|
323
|
+
| Fiber/FastHTTP not recovering | Use `Repanic: false, WaitForDelivery: true` for fasthttp-based frameworks |
|
|
324
|
+
| `SampleRate: 0.0` sending all events | `0.0` is treated as `1.0`; to drop all, set `Dsn: ""` instead |
|
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# Logging — Sentry Go SDK
|
|
2
|
+
|
|
3
|
+
> Minimum SDK: `github.com/getsentry/sentry-go` v0.33.0+\
|
|
4
|
+
> Minimum SDK for zap integration: v0.43.0+
|
|
5
|
+
|
|
6
|
+
## Configuration
|
|
7
|
+
|
|
8
|
+
Enable Sentry Logs in `sentry.Init`:
|
|
9
|
+
|
|
10
|
+
```go
|
|
11
|
+
sentry.Init(sentry.ClientOptions{
|
|
12
|
+
Dsn: os.Getenv("SENTRY_DSN"),
|
|
13
|
+
EnableLogs: true, // REQUIRED — logs are off by default
|
|
14
|
+
})
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Option | Type | Default | Purpose |
|
|
18
|
+
| --------------- | ----------------- | ------- | ----------------------------------------- |
|
|
19
|
+
| `EnableLogs` | `bool` | `false` | Enable Sentry Logs feature |
|
|
20
|
+
| `BeforeSendLog` | `func(*Log) *Log` | `nil` | Mutate or drop log entries before sending |
|
|
21
|
+
|
|
22
|
+
> If `EnableLogs` is `false`, `sentry.NewLogger(ctx)` returns a **no-op logger** — all
|
|
23
|
+
> calls are silently discarded.
|
|
24
|
+
|
|
25
|
+
## Code Examples
|
|
26
|
+
|
|
27
|
+
### Native Sentry logger
|
|
28
|
+
|
|
29
|
+
```go
|
|
30
|
+
import (
|
|
31
|
+
"context"
|
|
32
|
+
"time"
|
|
33
|
+
"github.com/getsentry/sentry-go"
|
|
34
|
+
"github.com/getsentry/sentry-go/attribute"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
func main() {
|
|
38
|
+
sentry.Init(sentry.ClientOptions{
|
|
39
|
+
Dsn: os.Getenv("SENTRY_DSN"),
|
|
40
|
+
EnableLogs: true,
|
|
41
|
+
})
|
|
42
|
+
defer sentry.Flush(2 * time.Second)
|
|
43
|
+
|
|
44
|
+
ctx := context.Background()
|
|
45
|
+
logger := sentry.NewLogger(ctx)
|
|
46
|
+
|
|
47
|
+
// Basic logging
|
|
48
|
+
logger.Info().Emit("server started")
|
|
49
|
+
logger.Warn().Emitf("queue depth: %d", 42)
|
|
50
|
+
logger.Error().Emit("database connection lost")
|
|
51
|
+
|
|
52
|
+
// Per-entry attributes (chained, non-persistent)
|
|
53
|
+
logger.Info().
|
|
54
|
+
String("request.id", "abc-123").
|
|
55
|
+
Int("status.code", 200).
|
|
56
|
+
Bool("cache.hit", true).
|
|
57
|
+
Float64("latency.ms", 12.3).
|
|
58
|
+
Emitf("request completed: %s", r.URL.Path)
|
|
59
|
+
|
|
60
|
+
// Permanent logger-level attributes (all subsequent entries include these)
|
|
61
|
+
logger.SetAttributes(
|
|
62
|
+
attribute.String("service", "payment-api"),
|
|
63
|
+
attribute.String("version", "2.1.0"),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
// Switch context on a single entry (for trace correlation)
|
|
67
|
+
logger.Info().WithCtx(requestCtx).Emit("handling request")
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Log levels
|
|
72
|
+
|
|
73
|
+
| Method | OTel Severity | Use for |
|
|
74
|
+
| ----------------- | ------------- | ------------------------------------ |
|
|
75
|
+
| `logger.Trace()` | 1 | Very detailed debugging |
|
|
76
|
+
| `logger.Debug()` | 5 | Development debugging |
|
|
77
|
+
| `logger.Info()` | 9 | Informational events |
|
|
78
|
+
| `logger.Warn()` | 13 | Warnings, recoverable issues |
|
|
79
|
+
| `logger.Error()` | 17 | Errors requiring attention |
|
|
80
|
+
| `logger.Fatal()` | 21 | Fatal — logs then calls `os.Exit(1)` |
|
|
81
|
+
| `logger.Panic()` | 21 | Fatal — logs then panics |
|
|
82
|
+
| `logger.LFatal()` | 21 | Logs at fatal level without exiting |
|
|
83
|
+
|
|
84
|
+
### BeforeSendLog — filtering logs
|
|
85
|
+
|
|
86
|
+
```go
|
|
87
|
+
sentry.Init(sentry.ClientOptions{
|
|
88
|
+
Dsn: os.Getenv("SENTRY_DSN"),
|
|
89
|
+
EnableLogs: true,
|
|
90
|
+
BeforeSendLog: func(log *sentry.Log) *sentry.Log {
|
|
91
|
+
// Drop trace and debug logs
|
|
92
|
+
if log.Severity <= sentry.LogSeverityDebug {
|
|
93
|
+
return nil
|
|
94
|
+
}
|
|
95
|
+
// Drop logs from noisy subsystem
|
|
96
|
+
if v, ok := log.Attributes["service"]; ok && v.String() == "health-checker" {
|
|
97
|
+
return nil
|
|
98
|
+
}
|
|
99
|
+
return log
|
|
100
|
+
},
|
|
101
|
+
})
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
`sentry.Log` struct fields: `Timestamp`, `TraceID`, `SpanID`, `Level`, `Severity` (int),
|
|
105
|
+
`Body`, `Attributes`.
|
|
106
|
+
|
|
107
|
+
### Auto-attached attributes
|
|
108
|
+
|
|
109
|
+
The SDK automatically appends these to every log entry:
|
|
110
|
+
|
|
111
|
+
| Attribute | Source |
|
|
112
|
+
| ------------------------------------ | --------------------------------------------- |
|
|
113
|
+
| `sentry.release` | `ClientOptions.Release` |
|
|
114
|
+
| `sentry.environment` | `ClientOptions.Environment` |
|
|
115
|
+
| `sentry.server.address` | `ClientOptions.ServerName` or `os.Hostname()` |
|
|
116
|
+
| `sentry.sdk.name` / `.version` | SDK identifier |
|
|
117
|
+
| `sentry.message.template` | Set when `Emitf()` is used |
|
|
118
|
+
| `sentry.message.parameters.0`, `.1`… | Parameters passed to `Emitf()` |
|
|
119
|
+
| `user.id`, `user.name`, `user.email` | Set if user is in scope |
|
|
120
|
+
|
|
121
|
+
## Logging Integrations
|
|
122
|
+
|
|
123
|
+
### Logrus
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
go get github.com/getsentry/sentry-go/logrus
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Two hook modes — use them independently or together:
|
|
130
|
+
|
|
131
|
+
```go
|
|
132
|
+
import (
|
|
133
|
+
"github.com/sirupsen/logrus"
|
|
134
|
+
"github.com/getsentry/sentry-go"
|
|
135
|
+
sentrylogrus "github.com/getsentry/sentry-go/logrus"
|
|
136
|
+
)
|
|
137
|
+
|
|
138
|
+
logger := logrus.New()
|
|
139
|
+
|
|
140
|
+
// Log hook: sends logrus entries as Sentry Log entries (requires EnableLogs: true)
|
|
141
|
+
logHook, _ := sentrylogrus.NewLogHook(
|
|
142
|
+
[]logrus.Level{logrus.InfoLevel, logrus.WarnLevel},
|
|
143
|
+
sentry.ClientOptions{Dsn: os.Getenv("SENTRY_DSN"), EnableLogs: true},
|
|
144
|
+
)
|
|
145
|
+
defer logHook.Flush(5 * time.Second)
|
|
146
|
+
|
|
147
|
+
// Event hook: sends logrus entries as Sentry Events (issues/errors)
|
|
148
|
+
eventHook, _ := sentrylogrus.NewEventHook(
|
|
149
|
+
[]logrus.Level{logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel},
|
|
150
|
+
sentry.ClientOptions{Dsn: os.Getenv("SENTRY_DSN")},
|
|
151
|
+
)
|
|
152
|
+
defer eventHook.Flush(5 * time.Second)
|
|
153
|
+
|
|
154
|
+
logger.AddHook(logHook)
|
|
155
|
+
logger.AddHook(eventHook)
|
|
156
|
+
|
|
157
|
+
// Flush before os.Exit on logger.Fatal()
|
|
158
|
+
logrus.RegisterExitHandler(func() {
|
|
159
|
+
logHook.Flush(5 * time.Second)
|
|
160
|
+
eventHook.Flush(5 * time.Second)
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
logger.Info("service started")
|
|
164
|
+
logger.WithField("user", sentry.User{ID: "u1"}).Error("payment failed")
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Logrus level mapping:**
|
|
168
|
+
|
|
169
|
+
| Logrus level | Sentry level |
|
|
170
|
+
| ------------ | ------------ |
|
|
171
|
+
| Trace, Debug | `debug` |
|
|
172
|
+
| Info | `info` |
|
|
173
|
+
| Warn | `warning` |
|
|
174
|
+
| Error | `error` |
|
|
175
|
+
| Fatal, Panic | `fatal` |
|
|
176
|
+
|
|
177
|
+
**Special field names** (auto-mapped to Sentry metadata):
|
|
178
|
+
|
|
179
|
+
| Field | Type | Maps to |
|
|
180
|
+
| --------------- | --------------- | -------------------- |
|
|
181
|
+
| `"request"` | `*http.Request` | `sentry.Request` |
|
|
182
|
+
| `"user"` | `sentry.User` | scope user |
|
|
183
|
+
| `"transaction"` | `string` | event transaction ID |
|
|
184
|
+
| `"fingerprint"` | `[]string` | event fingerprint |
|
|
185
|
+
|
|
186
|
+
### slog (Go 1.21+)
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
go get github.com/getsentry/sentry-go/slog
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
```go
|
|
193
|
+
import (
|
|
194
|
+
"context"
|
|
195
|
+
"log/slog"
|
|
196
|
+
"github.com/getsentry/sentry-go"
|
|
197
|
+
sentryslog "github.com/getsentry/sentry-go/slog"
|
|
198
|
+
)
|
|
199
|
+
|
|
200
|
+
sentry.Init(sentry.ClientOptions{
|
|
201
|
+
Dsn: os.Getenv("SENTRY_DSN"),
|
|
202
|
+
EnableLogs: true,
|
|
203
|
+
})
|
|
204
|
+
defer sentry.Flush(5 * time.Second)
|
|
205
|
+
|
|
206
|
+
ctx := context.Background()
|
|
207
|
+
handler := sentryslog.Option{
|
|
208
|
+
// These levels are sent as Sentry Events (issues)
|
|
209
|
+
EventLevel: []slog.Level{slog.LevelError, sentryslog.LevelFatal},
|
|
210
|
+
// These levels are sent as Sentry Log entries
|
|
211
|
+
LogLevel: []slog.Level{slog.LevelInfo, slog.LevelWarn, slog.LevelError},
|
|
212
|
+
AddSource: true, // include file:line in events
|
|
213
|
+
}.NewSentryHandler(ctx)
|
|
214
|
+
|
|
215
|
+
logger := slog.New(handler)
|
|
216
|
+
logger.Info("server started", "port", 8080)
|
|
217
|
+
logger.Warn("rate limit approaching", "requests", 950)
|
|
218
|
+
logger.Error("database connection failed", "host", "db.example.com")
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**slog level mapping:**
|
|
222
|
+
|
|
223
|
+
| slog.Level range | Sentry method |
|
|
224
|
+
| --------------------- | ------------- |
|
|
225
|
+
| `< -4` | `Trace` |
|
|
226
|
+
| `-4` to `-1` | `Debug` |
|
|
227
|
+
| `0` to `3` | `Info` |
|
|
228
|
+
| `4` to `7` | `Warn` |
|
|
229
|
+
| `8` to `11` | `Error` |
|
|
230
|
+
| `≥ 12` (`LevelFatal`) | `Fatal` |
|
|
231
|
+
|
|
232
|
+
`sentryslog.LevelFatal` is defined as `slog.Level(12)`.
|
|
233
|
+
|
|
234
|
+
### zerolog
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
go get github.com/getsentry/sentry-go/zerolog
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
> **Note:** The zerolog integration sends as **Sentry Events** (issues), not Sentry Log
|
|
241
|
+
> entries. It does not support structured logs.
|
|
242
|
+
|
|
243
|
+
```go
|
|
244
|
+
import (
|
|
245
|
+
"github.com/rs/zerolog"
|
|
246
|
+
"github.com/getsentry/sentry-go"
|
|
247
|
+
sentryzerolog "github.com/getsentry/sentry-go/zerolog"
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
writer, _ := sentryzerolog.New(sentryzerolog.Config{
|
|
251
|
+
ClientOptions: sentry.ClientOptions{Dsn: os.Getenv("SENTRY_DSN")},
|
|
252
|
+
Options: sentryzerolog.Options{
|
|
253
|
+
Levels: []zerolog.Level{zerolog.ErrorLevel, zerolog.FatalLevel},
|
|
254
|
+
WithBreadcrumbs: true, // non-error logs become breadcrumbs
|
|
255
|
+
FlushTimeout: 3 * time.Second,
|
|
256
|
+
},
|
|
257
|
+
})
|
|
258
|
+
defer writer.Close()
|
|
259
|
+
|
|
260
|
+
logger := zerolog.New(writer).With().Timestamp().Logger()
|
|
261
|
+
logger.Info().Msg("breadcrumb only")
|
|
262
|
+
logger.Error().Str("user", "u1").Msg("captured as Sentry event")
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Special field names** (same as logrus, auto-mapped): `"request"` → `*http.Request`,
|
|
266
|
+
`"user"` → `sentry.User`, `"transaction"` → string, `"fingerprint"` → `[]string`
|
|
267
|
+
|
|
268
|
+
### zap (v0.43.0+)
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
go get github.com/getsentry/sentry-go/zap
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
```go
|
|
275
|
+
import (
|
|
276
|
+
"context"
|
|
277
|
+
"github.com/getsentry/sentry-go"
|
|
278
|
+
sentryzap "github.com/getsentry/sentry-go/zap"
|
|
279
|
+
"go.uber.org/zap"
|
|
280
|
+
"go.uber.org/zap/zapcore"
|
|
281
|
+
"os"
|
|
282
|
+
)
|
|
283
|
+
|
|
284
|
+
sentry.Init(sentry.ClientOptions{
|
|
285
|
+
Dsn: os.Getenv("SENTRY_DSN"),
|
|
286
|
+
EnableLogs: true,
|
|
287
|
+
})
|
|
288
|
+
defer sentry.Flush(2 * time.Second)
|
|
289
|
+
|
|
290
|
+
ctx := context.Background()
|
|
291
|
+
sentryCore := sentryzap.NewSentryCore(ctx, sentryzap.Option{
|
|
292
|
+
Level: []zapcore.Level{zapcore.InfoLevel, zapcore.WarnLevel, zapcore.ErrorLevel},
|
|
293
|
+
AddCaller: true,
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
// Tee with console output
|
|
297
|
+
consoleCore := zapcore.NewCore(
|
|
298
|
+
zapcore.NewConsoleEncoder(zap.NewProductionEncoderConfig()),
|
|
299
|
+
zapcore.AddSync(os.Stdout),
|
|
300
|
+
zapcore.DebugLevel,
|
|
301
|
+
)
|
|
302
|
+
logger := zap.New(zapcore.NewTee(consoleCore, sentryCore), zap.AddCaller())
|
|
303
|
+
|
|
304
|
+
// Attach trace context to log entries
|
|
305
|
+
span := sentry.StartSpan(ctx, "my-operation")
|
|
306
|
+
defer span.Finish()
|
|
307
|
+
logger.With(sentryzap.Context(span.Context())).Info("within span",
|
|
308
|
+
zap.String("version", "1.0"),
|
|
309
|
+
zap.Float64("cpu", 0.42),
|
|
310
|
+
)
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**zap level mapping:**
|
|
314
|
+
|
|
315
|
+
| zap level | Sentry method |
|
|
316
|
+
| ------------- | -------------------------------------------- |
|
|
317
|
+
| Debug | `Debug` |
|
|
318
|
+
| Info | `Info` |
|
|
319
|
+
| Warn | `Warn` |
|
|
320
|
+
| Error, DPanic | `Error` |
|
|
321
|
+
| Panic, Fatal | `LFatal` (zap handles the actual exit/panic) |
|
|
322
|
+
|
|
323
|
+
## Integration Comparison
|
|
324
|
+
|
|
325
|
+
| Library | Package | Sends as | `EnableLogs` required |
|
|
326
|
+
| ------------------- | ------------------- | --------------------------- | --------------------- |
|
|
327
|
+
| Native | `sentry-go` | Sentry Logs | ✅ Yes |
|
|
328
|
+
| logrus (log hook) | `sentry-go/logrus` | Sentry Logs | ✅ Yes |
|
|
329
|
+
| logrus (event hook) | `sentry-go/logrus` | Sentry Events | ❌ No |
|
|
330
|
+
| slog | `sentry-go/slog` | Both (configurable) | ✅ For logs |
|
|
331
|
+
| zerolog | `sentry-go/zerolog` | Sentry Events + Breadcrumbs | ❌ No |
|
|
332
|
+
| zap | `sentry-go/zap` | Sentry Logs | ✅ Yes |
|
|
333
|
+
|
|
334
|
+
## Best Practices
|
|
335
|
+
|
|
336
|
+
- Enable both a log hook and an event hook for logrus — logs for visibility, events for
|
|
337
|
+
alerting
|
|
338
|
+
- For slog, configure `EventLevel` to `[slog.LevelError, LevelFatal]` and `LogLevel` for
|
|
339
|
+
the rest
|
|
340
|
+
- Call `hook.Flush()` (logrus) or `writer.Close()` (zerolog) before program exit
|
|
341
|
+
- Use `WithCtx(requestCtx)` on log entries inside HTTP handlers for trace correlation
|
|
342
|
+
- Set `sentry.LogSeverityInfo` as the minimum in `BeforeSendLog` to avoid sending noisy
|
|
343
|
+
debug logs
|
|
344
|
+
|
|
345
|
+
## Troubleshooting
|
|
346
|
+
|
|
347
|
+
| Issue | Solution |
|
|
348
|
+
| ----------------------------- | --------------------------------------------------------------------- |
|
|
349
|
+
| Logs not appearing in Sentry | Ensure `EnableLogs: true` in `ClientOptions` |
|
|
350
|
+
| `NewLogger` returns no-op | `EnableLogs` is false or no client is bound to the hub |
|
|
351
|
+
| Logrus `Fatal` not flushing | Register `logrus.RegisterExitHandler` to flush hooks before exit |
|
|
352
|
+
| zerolog entries not appearing | zerolog sends Events, not Logs — check the Issues section, not Logs |
|
|
353
|
+
| Logs missing trace context | Use `logger.Info().WithCtx(spanCtx).Emit(...)` to attach span context |
|
|
354
|
+
| Too many logs in Sentry | Use `BeforeSendLog` to filter by severity or attribute |
|