@logtide/elysia
v0.5.6
Published
LogTide SDK plugin for Elysia — request tracing and error capture via lifecycle hooks
Readme
Features
- Automatic request spans via
onRequest/onAfterHandlelifecycle hooks - Error capture via
onErrorhook with full request context - W3C Trace Context propagation (
traceparentin/out) - Breadcrumbs for HTTP requests
- Global plugin — traces all routes automatically
- Designed for Bun — works with Elysia's native runtime
- Full TypeScript support with strict types
Installation
npm install @logtide/elysia
# or
pnpm add @logtide/elysia
# or
bun add @logtide/elysiaQuick Start
import { Elysia } from 'elysia';
import { logtide } from '@logtide/elysia';
const app = new Elysia()
.use(logtide({
dsn: 'https://[email protected]',
// Or use apiUrl + apiKey instead of dsn:
// apiUrl: 'https://your-instance.com',
// apiKey: 'lp_your_key',
service: 'my-elysia-api',
environment: 'production',
}))
.get('/hello', () => 'Hello World')
.listen(3000);How It Works
The plugin registers global lifecycle hooks on the Elysia app:
onRequest— extracts incomingtraceparent, creates a span, stores scope on a WeakMap keyed by the requestonAfterHandle— finishes the span withokorerror, injectstraceparentinto response headersonError— finishes the span aserror, captures the error with full HTTP context
The plugin is registered with .as('global') so it applies to all routes, including those added after the plugin.
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:
const app = new Elysia()
.use(logtide({ dsn: '...', service: 'my-api' }))
.get('/boom', () => {
throw new Error('Something broke');
// Automatically captured with:
// - http.url, http.method
// - Error message and stack trace
// - Span marked as 'error'
});Distributed Tracing
Incoming traceparent headers are extracted and used as parent context:
# Client sends a traced request
curl -H "traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01" \
http://localhost:3000/api/dataThe span created by the plugin will use the same trace ID, enabling end-to-end distributed tracing across services.
Outgoing responses include a traceparent header with the span's context.
Exports
import { logtide } from '@logtide/elysia';
import type { LogtideElysiaOptions } from '@logtide/elysia';License
MIT License - see LICENSE for details.
