Enrichers
Enrichers Overview
Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Built-in enrichers and custom enricher support.
Enrichers add derived context to your wide events after they are emitted, before they reach your drain adapters. Use them to automatically extract useful information from request headers without cluttering your application code.
How Enrichers Work
Enrichers hook into the evlog:enrich event, which fires after a wide event is emitted and before the evlog:drain hook. The enricher receives the event and request metadata, and can mutate the event to add derived fields.
Request → emit() → evlog:enrich → evlog:drain
↑ enrichers ↑ adapters
add context send to services
server/plugins/evlog-enrich.ts
import { createUserAgentEnricher, createGeoEnricher } from 'evlog/enrichers'
export default defineNitroPlugin((nitroApp) => {
const enrichers = [
createUserAgentEnricher(),
createGeoEnricher(),
]
nitroApp.hooks.hook('evlog:enrich', (ctx) => {
for (const enricher of enrichers) enricher(ctx)
})
})
Enrich Context
Every enricher receives an EnrichContext with:
| Field | Type | Description |
|---|---|---|
event | WideEvent | The emitted wide event (mutable) |
request | object | Request metadata (method, path, requestId) |
headers | object | Safe HTTP request headers (sensitive headers are filtered) |
response | object | Response metadata (status, headers) |
Security: Sensitive headers (
authorization, cookie, x-api-key, etc.) are automatically filtered and never passed to enrichers.Available Enrichers
Overwrite Behavior
By default, enrichers preserve existing fields. If your application code already sets event.userAgent, the enricher won't overwrite it. Pass { overwrite: true } to change this:
createUserAgentEnricher({ overwrite: true })
Next Steps
- Built-in Enrichers - Detailed reference for all built-in enrichers
- Custom Enrichers - Write your own enrichers