| title | Track errors with Sentry |
|---|---|
| sidebarTitle | Sentry error tracking |
| description | This example demonstrates how to track errors with Sentry using Trigger.dev. |
Automatically send errors and source maps to your Sentry project from your Trigger.dev tasks. Sending source maps to Sentry allows for more detailed stack traces when errors occur, as Sentry can map the minified code back to the original source code.
- A Sentry account and project
- A Trigger.dev account and project
This setup involves two files:
trigger.config.ts- Configures the build to upload source maps to Sentry during deploymenttrigger/init.ts- Initializes Sentry and registers the error tracking hook at runtime
Add this build configuration to your trigger.config.ts file. This uses the Sentry esbuild plugin to upload source maps every time you deploy your project.
import { defineConfig } from "@trigger.dev/sdk";
import { esbuildPlugin } from "@trigger.dev/build/extensions";
import { sentryEsbuildPlugin } from "@sentry/esbuild-plugin";
export default defineConfig({
project: "<project ref>",
// Your other config settings...
build: {
extensions: [
esbuildPlugin(
sentryEsbuildPlugin({
org: "<your-sentry-org>",
project: "<your-sentry-project>",
// Find this auth token in settings -> developer settings -> auth tokens
authToken: process.env.SENTRY_AUTH_TOKEN,
}),
{ placement: "last", target: "deploy" }
),
],
},
});Create a trigger/init.ts file to initialize Sentry and register the global onFailure hook. This file is automatically loaded when your tasks execute.
import { tasks } from "@trigger.dev/sdk";
import * as Sentry from "@sentry/node";
// Initialize Sentry
Sentry.init({
defaultIntegrations: false,
// The Data Source Name (DSN) is a unique identifier for your Sentry project.
dsn: process.env.SENTRY_DSN,
// Update this to match the environment you want to track errors for
environment: process.env.NODE_ENV === "production" ? "production" : "development",
});
// Register a global onFailure hook to capture errors
tasks.onFailure(({ payload, error, ctx }) => {
Sentry.captureException(error, {
extra: {
payload,
ctx,
},
});
});To test that errors are being sent to Sentry, you need to create a task that will fail.
This task takes no payload, and will throw an error.
import { task } from "@trigger.dev/sdk";
export const sentryErrorTest = task({
id: "sentry-error-test",
retry: {
// Only retry once
maxAttempts: 1,
},
run: async () => {
const error = new Error("This is a custom error that Sentry will capture");
error.cause = { additionalContext: "This is additional context" };
throw error;
},
});After creating the task, deploy your project.
```bash npm
npx trigger.dev@latest deploy
```
```bash pnpm
pnpm dlx trigger.dev@latest deploy
```
```bash yarn
yarn dlx trigger.dev@latest deploy
```
</CodeGroup>
Once deployed, navigate to the test page in the sidebar of your Trigger.dev dashboard, click on your prod environment, and select the sentryErrorTest task.
Run a test task with an empty payload by clicking the Run test button.
Your run should then fail, and if everything is set up correctly, you will see an error in the Sentry project dashboard shortly after.