@logtide/fastify
v0.5.6
Published
LogTide SDK plugin for Fastify — request tracing and error capture
Readme
Features
- Automatic request spans for every incoming request
- Error capture with full request context
- W3C Trace Context propagation (
traceparentin/out) - Breadcrumbs for HTTP requests
- Scope access via
request.logtideScope - Fastify 4 and 5 support
- Full TypeScript support with strict types
Installation
npm install @logtide/fastify
# or
pnpm add @logtide/fastify
# or
yarn add @logtide/fastifyQuick Start
import Fastify from 'fastify';
import { logtide } from '@logtide/fastify';
const app = Fastify();
await app.register(logtide, {
dsn: 'https://[email protected]',
// Or use apiUrl + apiKey instead of dsn:
// apiUrl: 'https://your-instance.com',
// apiKey: 'lp_your_key',
service: 'my-fastify-api',
environment: 'production',
});
app.get('/hello', async () => ({ message: 'Hello World' }));
await app.listen({ port: 3000 });How It Works
The plugin hooks into Fastify's request lifecycle:
- onRequest: Extracts
traceparentheader (or generates a new trace ID), creates a span, stores scope onrequest - onResponse: Finishes the span with
okorerrorbased on status, injectstraceparentinto response - onError: Captures thrown errors with full HTTP context
Accessing the Scope
Use request.logtideScope to access the LogTide scope inside your handlers:
app.get('/users/:id', async (request, reply) => {
const scope = request.logtideScope;
const traceId = request.logtideTraceId;
// Add custom breadcrumbs
scope?.addBreadcrumb({
type: 'query',
category: 'database',
message: 'SELECT * FROM users WHERE id = ?',
timestamp: Date.now(),
});
return { id: request.params.id };
});Configuration
All ClientOptions from @logtide/core are supported:
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| dsn | string | required | DSN string: https://lp_KEY@host/PROJECT |
| service | string | required | Service name for log attribution |
| environment | string | — | Environment (e.g. production, staging) |
| release | string | — | Release / version identifier |
| debug | boolean | false | Enable debug logging |
| tracesSampleRate | number | 1.0 | Sample rate for traces (0.0 to 1.0) |
See @logtide/core README for the full list of options.
Error Handling
Errors thrown by handlers are automatically captured with:
- HTTP method and URL
- Request span marked as
error - Error serialized with stack trace
app.get('/boom', async () => {
throw new Error('Something broke');
// Automatically captured by LogTide plugin
});For 5xx responses, the plugin also logs an error entry.
Exports
import { logtide } from '@logtide/fastify';
import type { LogtideFastifyOptions } from '@logtide/fastify';License
MIT License - see LICENSE for details.
