Loading...
Loading...
Create a new built-in evlog adapter to send wide events to an external observability platform. Use when adding a new drain adapter (e.g., for Datadog, Sentry, Loki, Elasticsearch, etc.) to the evlog package. Covers source code, build config, package exports, tests, and all documentation.
npx skill4agent add hugorcd/evlog create-evlog-adapterfeat: add {name} adapterfeat: add OTLP adapterfeat: add Axiom drain adapterfeat:| # | File | Action |
|---|---|---|
| 1 | | Create adapter source |
| 2 | | Add build entry |
| 3 | | Add |
| 4 | | Create tests |
| 5 | | Create adapter doc page (before |
| 6 | | Add adapter to overview (links, card, env vars) |
| 7 | | Add adapter to the "Built-in Adapters" table |
| 8 | Renumber | Ensure |
| Placeholder | Example (Datadog) | Usage |
|---|---|---|
| | File names, import paths, env var suffix |
| | PascalCase in function/interface names |
| | SCREAMING_CASE in env var prefixes |
packages/evlog/src/adapters/{name}.tstimeout?: numbergetRuntimeConfig()./_utilscreate{Name}Drain()runtimeConfig.evlog.{name}runtimeConfig.{name}NUXT_{NAME}_*{NAME}_*create{Name}Drain(overrides?: Partial<Config>)(ctx: DrainContext) => Promise<void>sendTo{Name}(event, config)sendBatchTo{Name}(events, config)console.error('[evlog/{name}] ...')AbortControllerconfig.timeoutto{Name}Event()packages/evlog/tsdown.config.ts'adapters/{name}': 'src/adapters/{name}.ts',sentrypackages/evlog/package.jsonexports./posthog"./{name}": {
"types": "./dist/adapters/{name}.d.mts",
"import": "./dist/adapters/{name}.mjs"
}typesVersions["*"]"{name}": [
"./dist/adapters/{name}.d.mts"
]packages/evlog/test/adapters/{name}.test.tssendBatchTo{Name}apps/docs/content/3.adapters/{n}.{name}.md{n}custom.md---
title: "{Name} Adapter"
description: "Send logs to {Name} for [value prop]. Zero-config setup with environment variables."
navigation:
title: "{Name}"
icon: i-simple-icons-{name} # or i-lucide-* for generic
links:
- label: "{Name} Dashboard"
icon: i-lucide-external-link
to: https://{service-url}
target: _blank
color: neutral
variant: subtle
- label: "OTLP Adapter"
icon: i-simple-icons-opentelemetry
to: /adapters/otlp
color: neutral
variant: subtle
---evlog/{name}create{Name}Drain()sendTo{Name}()sendBatchTo{Name}()apps/docs/content/3.adapters/2.axiom.mdapps/docs/content/3.adapters/1.overview.mdlinks- label: "{Name}"
icon: i-simple-icons-{name}
to: /adapters/{name}
color: neutral
variant: subtle::card-group :::card
---
icon: i-simple-icons-{name}
title: {Name}
to: /adapters/{name}
---
[Short description of what the adapter does.]
:::.env.envNUXT_AXIOM_TOKENNUXT_OTLP_ENDPOINTNUXT_POSTHOG_API_KEY# {Name}
NUXT_{NAME}_<RELEVANT_VAR>=xxxAGENTS.md| {Name} | `evlog/{name}` | Send logs to {Name} for [description] |**Using {Name} Adapter:**
\`\`\`typescript
// server/plugins/evlog-drain.ts
import { create{Name}Drain } from 'evlog/{name}'
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('evlog:drain', create{Name}Drain())
})
\`\`\`
Set the required environment variables (e.g., \`NUXT_{NAME}_TOKEN\`, \`NUXT_{NAME}_ENDPOINT\`, etc. -- depends on the service).custom.mdcustom.mdcustom.md5.{name}.md5.custom.md6.custom.mdcd packages/evlog
bun run build # Verify build succeeds with new entry
bun run test # Verify tests pass