Framework
Easy
Elysia Framework Logging Integration
Add structured logging to Elysia applications running on Bun with lifecycle hooks, scoped context, and trace propagation.
Bun-optimized Lifecycle hook integration Plugin with .as('global') Trace propagation
LogTide’s Elysia SDK provides a Bun-optimized plugin for automatic request logging, scoped context, lifecycle hooks, and W3C trace propagation.
Why use LogTide with Elysia?
- Bun-optimized: Takes advantage of Bun’s performance
- Plugin architecture: Use
.as('global')for app-wide coverage - Lifecycle hooks: onRequest, afterResponse, onError, onStop
- Scoped context: Per-request scope via store decorators
- Auto-shutdown: Flushes pending logs when the server stops
Prerequisites
- Bun 1.x
- Elysia 1.x
- LogTide instance with a DSN
Installation
bun add @logtide/elysia
Quick Start
import { Elysia } from 'elysia';
import { hub } from '@logtide/core';
import { logtide } from '@logtide/elysia';
const app = new Elysia()
.use(logtide({
dsn: process.env.LOGTIDE_DSN,
service: 'elysia-api',
environment: process.env.NODE_ENV,
}))
.get('/users/:id', ({ params }) => {
hub.captureLog('info', 'Fetching user', { userId: params.id });
return { id: params.id };
})
.listen(3000);
Use .as('global') to apply the plugin to all routes, including those registered after.
Plugin Options
app.use(logtide({
dsn: process.env.LOGTIDE_DSN,
service: 'elysia-api',
environment: process.env.NODE_ENV,
release: '1.0.0',
tracesSampleRate: 1.0,
}));
Scoped Context
app
.use(logtide({
dsn: process.env.LOGTIDE_DSN,
service: 'elysia-api',
}))
.get('/orders', () => {
hub.captureLog('info', 'Listing orders');
return { orders: [] };
});
Lifecycle Hooks
| Hook | Behavior |
|---|---|
onRequest | Creates scope, extracts traceparent, starts span |
afterResponse | Logs completion with duration |
onError | Captures errors with request context |
onStop | Flushes pending events |
Error Handling
app
.use(logtide({
dsn: process.env.LOGTIDE_DSN,
service: 'elysia-api',
}))
.onError(({ code, error }) => {
// Error is already captured by the plugin
return new Response(JSON.stringify({
error: error.message,
}), {
status: code === 'NOT_FOUND' ? 404 : 500,
});
});
Next Steps
- JavaScript SDK - Core SDK reference
- Elysia SDK Reference - Full API documentation
- Docker Integration - Container deployments