Skip to content

Hono

The autotel-hono package provides an otel() middleware for automatic request tracing and HTTP metrics in Hono applications.

Terminal window
npm install autotel-hono autotel
import { Hono } from 'hono';
import { init, getRequestLogger } from 'autotel';
import { otel } from 'autotel-hono';
init({ service: 'my-api' });
const app = new Hono();
app.use('*', otel());
app.get('/api/users', async (c) => {
const log = getRequestLogger();
log.set({ route: '/api/users' });
const users = await db.users.findAll();
log.emitNow();
return c.json(users);
});

Use useLogger() from autotel-adapters/hono when the otel() middleware already creates a span (avoids duplicate spans):

import { otel } from 'autotel-hono';
import { useLogger } from 'autotel-adapters/hono';
app.use('*', otel());
app.get('/orders/:id', (c) => {
const log = useLogger(c);
log.set({ route: c.req.path });
return c.json({ ok: true });
});

The otel() middleware accepts options for customizing tracing behavior:

OptionDescription
tracerCustom tracer instance
tracerProviderCustom tracer provider
meterCustom meter instance
spanNameFactoryCustom span name from request
captureRequestHeadersHeaders to capture as span attributes
captureResponseHeadersResponse headers to capture
captureActiveRequestsTrack active request gauge
captureRequestDurationTrack request duration histogram
serviceNameOverride service name
serviceVersionOverride service version
disableTracingDisable span creation (metrics only)

HTTP request spans include:

  • http.request.method — GET, POST, etc.
  • url.path — Request path
  • http.response.status_code — Response status
  • http.request.duration_ms — Request duration
  • example-hono — Hono with otel() middleware, useLogger() request-scoped logging, and manual trace() in handlers.