Guide

Server Composables

Instrument your server routes manually with useOtelTracer and useOtelLogger

The module provides two composables for manual instrumentation in your server routes.

Use the tracer composable

useOtelTracer(namespace) creates a tracer that wraps async operations in OpenTelemetry spans:

import { defineEventHandler } from 'h3'

export default defineEventHandler(async () => {
  const { trace } = useOtelTracer('checkout')

  const result = await trace('process-payment', async () => {
    // This runs inside an OpenTelemetry span named "checkout.process-payment"
    const payment = await processPayment()
    return payment
  })

  return result
})

Use the logger composable

useOtelLogger() returns an OpenTelemetry logger instance for emitting structured logs:

import { defineEventHandler } from 'h3'

export default defineEventHandler(async () => {
  const logger = useOtelLogger()

  logger.emit({
    severityNumber: 9,
    body: 'Payment processed',
    attributes: { amount: 42, currency: 'USD' },
  })
})

Logs and spans created with these composables automatically appear in the DevTools UI when devtools are enabled.

Next steps

Copyright © 2026