[{"data":1,"prerenderedAt":2514},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-overview":528,"-integrate-adapters-overview-surround":2509},[4,29,76,122,304,435,496],{"title":5,"path":6,"stem":7,"children":8,"page":28},"Start","\u002Fstart","1.start",[9,13,18,23],{"title":10,"path":11,"stem":12},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction",{"title":14,"path":15,"stem":16,"icon":17},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":19,"path":20,"stem":21,"icon":22},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":24,"path":25,"stem":26,"icon":27},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":30,"path":31,"stem":32,"children":33,"page":28},"Learn","\u002Flearn","2.learn",[34,38,43,48,53,58,62,67,72],{"title":35,"path":36,"stem":37},"Learn evlog","\u002Flearn\u002Foverview","2.learn\u002F0.overview",{"title":39,"path":40,"stem":41,"icon":42},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":44,"path":45,"stem":46,"icon":47},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":49,"path":50,"stem":51,"icon":52},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":54,"path":55,"stem":56,"icon":57},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":59,"path":60,"stem":61},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling",{"title":63,"path":64,"stem":65,"icon":66},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":68,"path":69,"stem":70,"icon":71},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":73,"path":74,"stem":75},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs",{"title":77,"path":78,"stem":79,"children":80,"page":28},"CLI","\u002Fcli","3.cli",[81,85,90,95,99,103,108,113,118],{"title":82,"path":83,"stem":84},"evlog CLI","\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":86,"path":87,"stem":88,"icon":89},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":91,"path":92,"stem":93,"icon":94},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":96,"path":97,"stem":98},"Map rules","\u002Fcli\u002Frules","3.cli\u002F3.rules",{"title":100,"path":101,"stem":102},"Map scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring",{"title":104,"path":105,"stem":106,"icon":107},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":109,"path":110,"stem":111,"icon":112},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":114,"path":115,"stem":116,"icon":117},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":119,"path":120,"stem":121},"evlog agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents",{"title":123,"path":124,"stem":125,"children":126,"page":28},"Integrate","\u002Fintegrate","4.integrate",[127,132,216],{"title":128,"path":129,"stem":130,"icon":131},"Overview","\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":28},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,141,171,196],{"title":128,"path":138,"stem":139,"icon":140},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview","i-lucide-list",{"title":142,"path":143,"stem":144,"children":145,"page":28},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[146,151,156,161,166],{"title":147,"path":148,"stem":149,"icon":150},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":152,"path":153,"stem":154,"icon":155},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":157,"path":158,"stem":159,"icon":160},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":162,"path":163,"stem":164,"icon":165},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":167,"path":168,"stem":169,"icon":170},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":172,"path":173,"stem":174,"children":175,"page":28},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[176,181,186,191],{"title":177,"path":178,"stem":179,"icon":180},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":182,"path":183,"stem":184,"icon":185},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":187,"path":188,"stem":189,"icon":190},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":192,"path":193,"stem":194,"icon":195},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":197,"path":198,"stem":199,"children":200,"page":28},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[201,206,211],{"title":202,"path":203,"stem":204,"icon":205},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":207,"path":208,"stem":209,"icon":210},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":212,"path":213,"stem":214,"icon":215},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":217,"path":218,"stem":219,"children":220,"page":28},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[221,225,230,235,240,245,250,255,260,265,270,275,280,285,289,294,299],{"title":128,"path":222,"stem":223,"icon":224},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":226,"path":227,"stem":228,"icon":229},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":231,"path":232,"stem":233,"icon":234},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":236,"path":237,"stem":238,"icon":239},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":241,"path":242,"stem":243,"icon":244},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":246,"path":247,"stem":248,"icon":249},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":251,"path":252,"stem":253,"icon":254},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":256,"path":257,"stem":258,"icon":259},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":261,"path":262,"stem":263,"icon":264},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":266,"path":267,"stem":268,"icon":269},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":271,"path":272,"stem":273,"icon":274},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":276,"path":277,"stem":278,"icon":279},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":281,"path":282,"stem":283,"icon":284},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":286,"path":287,"stem":288,"icon":71},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":290,"path":291,"stem":292,"icon":293},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":295,"path":296,"stem":297,"icon":298},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":300,"path":301,"stem":302,"icon":303},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":305,"path":306,"stem":307,"children":308,"page":28},"Use Cases","\u002Fuse-cases","5.use-cases",[309,312,317,346,374,407,427,431],{"title":305,"path":310,"stem":311},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":313,"path":314,"stem":315,"icon":316},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":318,"icon":319,"path":320,"stem":321,"children":322,"page":28},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[323,326,331,336,341],{"title":128,"path":324,"stem":325,"icon":140},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":327,"path":328,"stem":329,"icon":330},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":332,"path":333,"stem":334,"icon":335},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":337,"path":338,"stem":339,"icon":340},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":342,"path":343,"stem":344,"icon":345},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":28},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[352,355,360,365,369],{"title":128,"path":353,"stem":354,"icon":140},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":356,"path":357,"stem":358,"icon":359},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":361,"path":362,"stem":363,"icon":364},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":366,"path":367,"stem":368,"icon":316},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":370,"path":371,"stem":372,"icon":373},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":375,"icon":376,"path":377,"stem":378,"children":379,"page":28},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[380,383,388,393,398,402],{"title":128,"path":381,"stem":382,"icon":140},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":384,"path":385,"stem":386,"icon":387},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":389,"path":390,"stem":391,"icon":392},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":394,"path":395,"stem":396,"icon":397},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":376},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":403,"path":404,"stem":405,"icon":406},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes","i-lucide-book-open",{"title":342,"icon":373,"path":408,"stem":409,"children":410,"page":28},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[411,414,419,423],{"title":128,"path":412,"stem":413,"icon":140},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":415,"path":416,"stem":417,"icon":418},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":420,"path":421,"stem":422},"Telemetry Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest",{"title":424,"path":425,"stem":426,"icon":406},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":428,"path":429,"stem":430},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers",{"title":432,"path":433,"stem":434},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":436,"path":437,"stem":438,"children":439,"page":28},"Extend","\u002Fextend","6.extend",[440,444,449,454,458,463,467,471,476,481,486,491],{"title":128,"path":441,"stem":442,"icon":443},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":445,"path":446,"stem":447,"icon":448},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":450,"path":451,"stem":452,"icon":453},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":455,"path":456,"stem":457,"icon":448},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":459,"path":460,"stem":461,"icon":462},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":464,"stem":465,"icon":466},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":468,"path":469,"stem":470},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":472,"path":473,"stem":474,"icon":475},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers","i-lucide-sparkles",{"title":477,"path":478,"stem":479,"icon":480},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling","i-lucide-filter",{"title":482,"path":483,"stem":484,"icon":485},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":487,"path":488,"stem":489,"icon":490},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":492,"path":493,"stem":494,"icon":495},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":424,"path":497,"stem":498,"children":499,"page":28},"\u002Freference","7.reference",[500,504,507,512,516,520,524],{"title":501,"path":502,"stem":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration",{"title":370,"path":505,"stem":506,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":508,"path":509,"stem":510,"icon":511},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":513,"path":514,"stem":515,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":517,"path":518,"stem":519},"evlog vs pino, winston, consola","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers",{"title":521,"path":522,"stem":523,"icon":475},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":525,"path":526,"stem":527},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":529,"title":530,"body":531,"description":2489,"extension":2490,"links":2491,"meta":2505,"navigation":2506,"path":138,"seo":2507,"stem":139,"__hash__":2508},"docs\u002F4.integrate\u002Fadapters\u002F01.overview.md","Adapters Overview",{"type":532,"value":533,"toc":2480},"minimark",[534,538,541,546,559,562,1160,1173,1177,1230,1234,1244,1589,1602,1606,1609,1752,1758,2058,2062,2068,2145,2162,2166,2169,2172,2418,2425,2429,2432,2473,2476],[535,536,537],"p",{},"Adapters let you send logs to external observability platforms. evlog provides built-in adapters for popular services, and you can create custom adapters for any destination.",[539,540],"drain-fan-out",{},[542,543,545],"h2",{"id":544},"how-adapters-work","How Adapters Work",[535,547,548,549,553,554,558],{},"Adapters receive a ",[550,551,552],"code",{},"DrainContext"," after each request completes and send the data to an external service. The drain runs in ",[555,556,557],"strong",{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[535,560,561],{},"How you wire an adapter depends on your framework:",[563,564,565,699,830,892,946,1005,1059,1112],"code-group",{},[566,567,573],"pre",{"className":568,"code":569,"filename":570,"language":571,"meta":572,"style":572},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","Nuxt \u002F Nitro","typescript","",[550,574,575,584,615,622,654,690],{"__ignoreMap":572},[576,577,580],"span",{"class":578,"line":579},"line",1,[576,581,583],{"class":582},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[576,585,587,591,595,599,602,605,608,612],{"class":578,"line":586},2,[576,588,590],{"class":589},"s7zQu","import",[576,592,594],{"class":593},"sMK4o"," {",[576,596,598],{"class":597},"sTEyZ"," createAxiomDrain",[576,600,601],{"class":593}," }",[576,603,604],{"class":589}," from",[576,606,607],{"class":593}," '",[576,609,611],{"class":610},"sfazB","evlog\u002Faxiom",[576,613,614],{"class":593},"'\n",[576,616,618],{"class":578,"line":617},3,[576,619,621],{"emptyLinePlaceholder":620},true,"\n",[576,623,625,628,631,635,638,640,644,647,651],{"class":578,"line":624},4,[576,626,627],{"class":589},"export",[576,629,630],{"class":589}," default",[576,632,634],{"class":633},"s2Zo4"," defineNitroPlugin",[576,636,637],{"class":597},"(",[576,639,637],{"class":593},[576,641,643],{"class":642},"sHdIc","nitroApp",[576,645,646],{"class":593},")",[576,648,650],{"class":649},"spNyl"," =>",[576,652,653],{"class":593}," {\n",[576,655,657,660,663,666,668,671,674,677,680,682,685,687],{"class":578,"line":656},5,[576,658,659],{"class":597},"  nitroApp",[576,661,662],{"class":593},".",[576,664,665],{"class":597},"hooks",[576,667,662],{"class":593},[576,669,670],{"class":633},"hook",[576,672,637],{"class":673},"swJcz",[576,675,676],{"class":593},"'",[576,678,679],{"class":610},"evlog:drain",[576,681,676],{"class":593},[576,683,684],{"class":593},",",[576,686,598],{"class":633},[576,688,689],{"class":673},"())\n",[576,691,693,696],{"class":578,"line":692},6,[576,694,695],{"class":593},"}",[576,697,698],{"class":597},")\n",[566,700,702],{"className":568,"code":701,"filename":231,"language":571,"meta":572,"style":572},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain: createAxiomDrain(),\n})\n",[550,703,704,709,729,747,751,790,808,823],{"__ignoreMap":572},[576,705,706],{"class":578,"line":579},[576,707,708],{"class":582},"\u002F\u002F lib\u002Fevlog.ts\n",[576,710,711,713,715,718,720,722,724,727],{"class":578,"line":586},[576,712,590],{"class":589},[576,714,594],{"class":593},[576,716,717],{"class":597}," createEvlog",[576,719,601],{"class":593},[576,721,604],{"class":589},[576,723,607],{"class":593},[576,725,726],{"class":610},"evlog\u002Fnext",[576,728,614],{"class":593},[576,730,731,733,735,737,739,741,743,745],{"class":578,"line":617},[576,732,590],{"class":589},[576,734,594],{"class":593},[576,736,598],{"class":597},[576,738,601],{"class":593},[576,740,604],{"class":589},[576,742,607],{"class":593},[576,744,611],{"class":610},[576,746,614],{"class":593},[576,748,749],{"class":578,"line":624},[576,750,621],{"emptyLinePlaceholder":620},[576,752,753,755,758,760,763,765,768,770,773,775,778,780,783,785,787],{"class":578,"line":656},[576,754,627],{"class":589},[576,756,757],{"class":649}," const",[576,759,594],{"class":593},[576,761,762],{"class":597}," withEvlog",[576,764,684],{"class":593},[576,766,767],{"class":597}," useLogger",[576,769,684],{"class":593},[576,771,772],{"class":597}," log",[576,774,684],{"class":593},[576,776,777],{"class":597}," createError ",[576,779,695],{"class":593},[576,781,782],{"class":593}," =",[576,784,717],{"class":633},[576,786,637],{"class":597},[576,788,789],{"class":593},"{\n",[576,791,792,795,798,800,803,805],{"class":578,"line":692},[576,793,794],{"class":673},"  service",[576,796,797],{"class":593},":",[576,799,607],{"class":593},[576,801,802],{"class":610},"my-app",[576,804,676],{"class":593},[576,806,807],{"class":593},",\n",[576,809,811,814,816,818,821],{"class":578,"line":810},7,[576,812,813],{"class":673},"  drain",[576,815,797],{"class":593},[576,817,598],{"class":633},[576,819,820],{"class":597},"()",[576,822,807],{"class":593},[576,824,826,828],{"class":578,"line":825},8,[576,827,695],{"class":593},[576,829,698],{"class":597},[566,831,833],{"className":568,"code":832,"filename":261,"language":571,"meta":572,"style":572},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\napp.use(evlog({ drain: createAxiomDrain() }))\n",[550,834,835,853,857],{"__ignoreMap":572},[576,836,837,839,841,843,845,847,849,851],{"class":578,"line":579},[576,838,590],{"class":589},[576,840,594],{"class":593},[576,842,598],{"class":597},[576,844,601],{"class":593},[576,846,604],{"class":589},[576,848,607],{"class":593},[576,850,611],{"class":610},[576,852,614],{"class":593},[576,854,855],{"class":578,"line":586},[576,856,621],{"emptyLinePlaceholder":620},[576,858,859,862,864,867,869,872,874,877,880,882,884,887,889],{"class":578,"line":617},[576,860,861],{"class":597},"app",[576,863,662],{"class":593},[576,865,866],{"class":633},"use",[576,868,637],{"class":597},[576,870,871],{"class":633},"evlog",[576,873,637],{"class":597},[576,875,876],{"class":593},"{",[576,878,879],{"class":673}," drain",[576,881,797],{"class":593},[576,883,598],{"class":633},[576,885,886],{"class":597},"() ",[576,888,695],{"class":593},[576,890,891],{"class":597},"))\n",[566,893,894],{"className":568,"code":832,"filename":256,"language":571,"meta":572,"style":572},[550,895,896,914,918],{"__ignoreMap":572},[576,897,898,900,902,904,906,908,910,912],{"class":578,"line":579},[576,899,590],{"class":589},[576,901,594],{"class":593},[576,903,598],{"class":597},[576,905,601],{"class":593},[576,907,604],{"class":589},[576,909,607],{"class":593},[576,911,611],{"class":610},[576,913,614],{"class":593},[576,915,916],{"class":578,"line":586},[576,917,621],{"emptyLinePlaceholder":620},[576,919,920,922,924,926,928,930,932,934,936,938,940,942,944],{"class":578,"line":617},[576,921,861],{"class":597},[576,923,662],{"class":593},[576,925,866],{"class":633},[576,927,637],{"class":597},[576,929,871],{"class":633},[576,931,637],{"class":597},[576,933,876],{"class":593},[576,935,879],{"class":673},[576,937,797],{"class":593},[576,939,598],{"class":633},[576,941,886],{"class":597},[576,943,695],{"class":593},[576,945,891],{"class":597},[566,947,949],{"className":568,"code":948,"filename":266,"language":571,"meta":572,"style":572},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nawait app.register(evlog, { drain: createAxiomDrain() })\n",[550,950,951,969,973],{"__ignoreMap":572},[576,952,953,955,957,959,961,963,965,967],{"class":578,"line":579},[576,954,590],{"class":589},[576,956,594],{"class":593},[576,958,598],{"class":597},[576,960,601],{"class":593},[576,962,604],{"class":589},[576,964,607],{"class":593},[576,966,611],{"class":610},[576,968,614],{"class":593},[576,970,971],{"class":578,"line":586},[576,972,621],{"emptyLinePlaceholder":620},[576,974,975,978,981,983,986,989,991,993,995,997,999,1001,1003],{"class":578,"line":617},[576,976,977],{"class":589},"await",[576,979,980],{"class":597}," app",[576,982,662],{"class":593},[576,984,985],{"class":633},"register",[576,987,988],{"class":597},"(evlog",[576,990,684],{"class":593},[576,992,594],{"class":593},[576,994,879],{"class":673},[576,996,797],{"class":593},[576,998,598],{"class":633},[576,1000,886],{"class":597},[576,1002,695],{"class":593},[576,1004,698],{"class":597},[566,1006,1007],{"className":568,"code":832,"filename":271,"language":571,"meta":572,"style":572},[550,1008,1009,1027,1031],{"__ignoreMap":572},[576,1010,1011,1013,1015,1017,1019,1021,1023,1025],{"class":578,"line":579},[576,1012,590],{"class":589},[576,1014,594],{"class":593},[576,1016,598],{"class":597},[576,1018,601],{"class":593},[576,1020,604],{"class":589},[576,1022,607],{"class":593},[576,1024,611],{"class":610},[576,1026,614],{"class":593},[576,1028,1029],{"class":578,"line":586},[576,1030,621],{"emptyLinePlaceholder":620},[576,1032,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057],{"class":578,"line":617},[576,1034,861],{"class":597},[576,1036,662],{"class":593},[576,1038,866],{"class":633},[576,1040,637],{"class":597},[576,1042,871],{"class":633},[576,1044,637],{"class":597},[576,1046,876],{"class":593},[576,1048,879],{"class":673},[576,1050,797],{"class":593},[576,1052,598],{"class":633},[576,1054,886],{"class":597},[576,1056,695],{"class":593},[576,1058,891],{"class":597},[566,1060,1062],{"className":568,"code":1061,"filename":251,"language":571,"meta":572,"style":572},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nEvlogModule.forRoot({ drain: createAxiomDrain() })\n",[550,1063,1064,1082,1086],{"__ignoreMap":572},[576,1065,1066,1068,1070,1072,1074,1076,1078,1080],{"class":578,"line":579},[576,1067,590],{"class":589},[576,1069,594],{"class":593},[576,1071,598],{"class":597},[576,1073,601],{"class":593},[576,1075,604],{"class":589},[576,1077,607],{"class":593},[576,1079,611],{"class":610},[576,1081,614],{"class":593},[576,1083,1084],{"class":578,"line":586},[576,1085,621],{"emptyLinePlaceholder":620},[576,1087,1088,1091,1093,1096,1098,1100,1102,1104,1106,1108,1110],{"class":578,"line":617},[576,1089,1090],{"class":597},"EvlogModule",[576,1092,662],{"class":593},[576,1094,1095],{"class":633},"forRoot",[576,1097,637],{"class":597},[576,1099,876],{"class":593},[576,1101,879],{"class":673},[576,1103,797],{"class":593},[576,1105,598],{"class":633},[576,1107,886],{"class":597},[576,1109,695],{"class":593},[576,1111,698],{"class":597},[566,1113,1115],{"className":568,"code":1114,"filename":286,"language":571,"meta":572,"style":572},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({ drain: createAxiomDrain() })\n",[550,1116,1117,1135,1139],{"__ignoreMap":572},[576,1118,1119,1121,1123,1125,1127,1129,1131,1133],{"class":578,"line":579},[576,1120,590],{"class":589},[576,1122,594],{"class":593},[576,1124,598],{"class":597},[576,1126,601],{"class":593},[576,1128,604],{"class":589},[576,1130,607],{"class":593},[576,1132,611],{"class":610},[576,1134,614],{"class":593},[576,1136,1137],{"class":578,"line":586},[576,1138,621],{"emptyLinePlaceholder":620},[576,1140,1141,1144,1146,1148,1150,1152,1154,1156,1158],{"class":578,"line":617},[576,1142,1143],{"class":633},"initLogger",[576,1145,637],{"class":597},[576,1147,876],{"class":593},[576,1149,879],{"class":673},[576,1151,797],{"class":593},[576,1153,598],{"class":633},[576,1155,886],{"class":597},[576,1157,695],{"class":593},[576,1159,698],{"class":597},[1161,1162,1165,1168,1169,1172],"callout",{"color":1163,"icon":1164},"info","i-lucide-cloud",[555,1166,1167],{},"Serverless Support:"," On Cloudflare Workers and Vercel Edge, evlog automatically uses ",[550,1170,1171],{},"waitUntil()"," to ensure drains complete before the runtime terminates. No additional configuration needed.",[542,1174,1176],{"id":1175},"available-adapters","Available Adapters",[1178,1179,1180,1184,1187,1190,1193,1196,1199,1202,1205,1208,1211,1214,1217,1221,1226],"card-group",{},[1181,1182,1183],"card",{"icon":150,"title":147,"to":148},"Send logs to Axiom, which indexes every field so you can query on any of them.",[1181,1185,1186],{"icon":155,"title":152,"to":153},"Send logs to PostHog Logs for structured logging and observability.",[1181,1188,1189],{"icon":160,"title":157,"to":158},"Send structured logs to Sentry Logs for high-cardinality querying.",[1181,1191,1192],{"icon":165,"title":162,"to":163},"Send logs to Better Stack for log management and alerting.",[1181,1194,1195],{"icon":170,"title":167,"to":168},"Send logs to Datadog Logs via the native HTTP intake API.",[1181,1197,1198],{"icon":180,"title":177,"to":178},"Push logs to self-hosted, multi-tenant, or Grafana Cloud Loki.",[1181,1200,1201],{"icon":185,"title":182,"to":183},"Insert logs into ClickHouse for fast aggregation over huge volumes.",[1181,1203,1204],{"icon":190,"title":187,"to":188},"OpenTelemetry Protocol for Grafana, Datadog, Honeycomb, and more.",[1181,1206,1207],{"icon":195,"title":192,"to":193},"Send logs to HyperDX via OTLP\u002FHTTP using their documented ingest endpoint and API key.",[1181,1209,1210],{"icon":205,"title":202,"to":203},"Write logs to local NDJSON files for debugging and AI agent integration.",[1181,1212,1213],{"icon":210,"title":207,"to":208},"Self-hosted log storage in your NuxtHub database with automatic retention.",[1181,1215,1216],{"icon":215,"title":212,"to":213},"In-memory ring buffer that works in any runtime, including Cloudflare Workers.",[1181,1218,1220],{"icon":330,"title":1219,"to":488},"Custom","Build your own adapter for any destination.",[1181,1222,1225],{"icon":1223,"title":1224,"to":493},"i-lucide-globe","HTTP","Send client logs to your server over HTTP without framework coupling.",[1181,1227,1229],{"icon":495,"title":1228,"to":493},"Pipeline","Batch events, retry on failure, and handle buffer overflow.",[542,1231,1233],{"id":1232},"standalone-usage","Standalone Usage",[535,1235,1236,1237,1240,1241,1243],{},"In plain TypeScript or Bun scripts (no HTTP framework), use the ",[550,1238,1239],{},"drain"," option in ",[550,1242,1143],{},". Every emitted event is drained automatically.",[566,1245,1248],{"className":568,"code":1246,"filename":1247,"language":571,"meta":572,"style":572},"import type { DrainContext } from 'evlog'\nimport { initLogger, log, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>()\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script' },\n  drain,\n})\n\nlog.info({ action: 'job_started' }) \u002F\u002F drained automatically\n\nconst reqLog = createRequestLogger({ method: 'POST', path: '\u002Fprocess' })\nreqLog.set({ processed: 42 })\nreqLog.emit() \u002F\u002F drained automatically\n\nawait drain.flush()\n","index.ts",[550,1249,1250,1272,1300,1318,1338,1342,1367,1386,1390,1399,1424,1431,1438,1443,1477,1482,1528,1556,1570,1575],{"__ignoreMap":572},[576,1251,1252,1254,1257,1259,1262,1264,1266,1268,1270],{"class":578,"line":579},[576,1253,590],{"class":589},[576,1255,1256],{"class":589}," type",[576,1258,594],{"class":593},[576,1260,1261],{"class":597}," DrainContext",[576,1263,601],{"class":593},[576,1265,604],{"class":589},[576,1267,607],{"class":593},[576,1269,871],{"class":610},[576,1271,614],{"class":593},[576,1273,1274,1276,1278,1281,1283,1285,1287,1290,1292,1294,1296,1298],{"class":578,"line":586},[576,1275,590],{"class":589},[576,1277,594],{"class":593},[576,1279,1280],{"class":597}," initLogger",[576,1282,684],{"class":593},[576,1284,772],{"class":597},[576,1286,684],{"class":593},[576,1288,1289],{"class":597}," createRequestLogger",[576,1291,601],{"class":593},[576,1293,604],{"class":589},[576,1295,607],{"class":593},[576,1297,871],{"class":610},[576,1299,614],{"class":593},[576,1301,1302,1304,1306,1308,1310,1312,1314,1316],{"class":578,"line":617},[576,1303,590],{"class":589},[576,1305,594],{"class":593},[576,1307,598],{"class":597},[576,1309,601],{"class":593},[576,1311,604],{"class":589},[576,1313,607],{"class":593},[576,1315,611],{"class":610},[576,1317,614],{"class":593},[576,1319,1320,1322,1324,1327,1329,1331,1333,1336],{"class":578,"line":624},[576,1321,590],{"class":589},[576,1323,594],{"class":593},[576,1325,1326],{"class":597}," createDrainPipeline",[576,1328,601],{"class":593},[576,1330,604],{"class":589},[576,1332,607],{"class":593},[576,1334,1335],{"class":610},"evlog\u002Fpipeline",[576,1337,614],{"class":593},[576,1339,1340],{"class":578,"line":656},[576,1341,621],{"emptyLinePlaceholder":620},[576,1343,1344,1347,1350,1353,1355,1358,1361,1364],{"class":578,"line":692},[576,1345,1346],{"class":649},"const",[576,1348,1349],{"class":597}," pipeline ",[576,1351,1352],{"class":593},"=",[576,1354,1326],{"class":633},[576,1356,1357],{"class":593},"\u003C",[576,1359,552],{"class":1360},"sBMFI",[576,1362,1363],{"class":593},">",[576,1365,1366],{"class":597},"()\n",[576,1368,1369,1371,1374,1376,1379,1381,1384],{"class":578,"line":810},[576,1370,1346],{"class":649},[576,1372,1373],{"class":597}," drain ",[576,1375,1352],{"class":593},[576,1377,1378],{"class":633}," pipeline",[576,1380,637],{"class":597},[576,1382,1383],{"class":633},"createAxiomDrain",[576,1385,689],{"class":597},[576,1387,1388],{"class":578,"line":825},[576,1389,621],{"emptyLinePlaceholder":620},[576,1391,1393,1395,1397],{"class":578,"line":1392},9,[576,1394,1143],{"class":633},[576,1396,637],{"class":597},[576,1398,789],{"class":593},[576,1400,1402,1405,1407,1409,1412,1414,1416,1419,1421],{"class":578,"line":1401},10,[576,1403,1404],{"class":673},"  env",[576,1406,797],{"class":593},[576,1408,594],{"class":593},[576,1410,1411],{"class":673}," service",[576,1413,797],{"class":593},[576,1415,607],{"class":593},[576,1417,1418],{"class":610},"my-script",[576,1420,676],{"class":593},[576,1422,1423],{"class":593}," },\n",[576,1425,1427,1429],{"class":578,"line":1426},11,[576,1428,813],{"class":597},[576,1430,807],{"class":593},[576,1432,1434,1436],{"class":578,"line":1433},12,[576,1435,695],{"class":593},[576,1437,698],{"class":597},[576,1439,1441],{"class":578,"line":1440},13,[576,1442,621],{"emptyLinePlaceholder":620},[576,1444,1446,1449,1451,1453,1455,1457,1460,1462,1464,1467,1469,1471,1474],{"class":578,"line":1445},14,[576,1447,1448],{"class":597},"log",[576,1450,662],{"class":593},[576,1452,1163],{"class":633},[576,1454,637],{"class":597},[576,1456,876],{"class":593},[576,1458,1459],{"class":673}," action",[576,1461,797],{"class":593},[576,1463,607],{"class":593},[576,1465,1466],{"class":610},"job_started",[576,1468,676],{"class":593},[576,1470,601],{"class":593},[576,1472,1473],{"class":597},") ",[576,1475,1476],{"class":582},"\u002F\u002F drained automatically\n",[576,1478,1480],{"class":578,"line":1479},15,[576,1481,621],{"emptyLinePlaceholder":620},[576,1483,1485,1487,1490,1492,1494,1496,1498,1501,1503,1505,1508,1510,1512,1515,1517,1519,1522,1524,1526],{"class":578,"line":1484},16,[576,1486,1346],{"class":649},[576,1488,1489],{"class":597}," reqLog ",[576,1491,1352],{"class":593},[576,1493,1289],{"class":633},[576,1495,637],{"class":597},[576,1497,876],{"class":593},[576,1499,1500],{"class":673}," method",[576,1502,797],{"class":593},[576,1504,607],{"class":593},[576,1506,1507],{"class":610},"POST",[576,1509,676],{"class":593},[576,1511,684],{"class":593},[576,1513,1514],{"class":673}," path",[576,1516,797],{"class":593},[576,1518,607],{"class":593},[576,1520,1521],{"class":610},"\u002Fprocess",[576,1523,676],{"class":593},[576,1525,601],{"class":593},[576,1527,698],{"class":597},[576,1529,1531,1534,1536,1539,1541,1543,1546,1548,1552,1554],{"class":578,"line":1530},17,[576,1532,1533],{"class":597},"reqLog",[576,1535,662],{"class":593},[576,1537,1538],{"class":633},"set",[576,1540,637],{"class":597},[576,1542,876],{"class":593},[576,1544,1545],{"class":673}," processed",[576,1547,797],{"class":593},[576,1549,1551],{"class":1550},"sbssI"," 42",[576,1553,601],{"class":593},[576,1555,698],{"class":597},[576,1557,1559,1561,1563,1566,1568],{"class":578,"line":1558},18,[576,1560,1533],{"class":597},[576,1562,662],{"class":593},[576,1564,1565],{"class":633},"emit",[576,1567,886],{"class":597},[576,1569,1476],{"class":582},[576,1571,1573],{"class":578,"line":1572},19,[576,1574,621],{"emptyLinePlaceholder":620},[576,1576,1578,1580,1582,1584,1587],{"class":578,"line":1577},20,[576,1579,977],{"class":589},[576,1581,879],{"class":597},[576,1583,662],{"class":593},[576,1585,1586],{"class":633},"flush",[576,1588,1366],{"class":597},[1161,1590,1593,1594,1601],{"color":1591,"icon":1592},"neutral","i-lucide-arrow-right","See the full ",[1595,1596,1600],"a",{"href":1597,"rel":1598},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[1599],"nofollow","bun-script example"," for a realistic batch processing script.",[542,1603,1605],{"id":1604},"multiple-destinations","Multiple Destinations",[535,1607,1608],{},"Send logs to multiple services simultaneously by composing drains:",[566,1610,1613],{"className":568,"code":1611,"filename":1612,"language":571,"meta":572,"style":572},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nconst axiom = createAxiomDrain()\nconst otlp = createOTLPDrain()\n\nconst drain = async (ctx) => {\n  await Promise.allSettled([axiom(ctx), otlp(ctx)])\n}\n","src\u002Findex.ts",[550,1614,1615,1633,1653,1657,1670,1683,1687,1710,1747],{"__ignoreMap":572},[576,1616,1617,1619,1621,1623,1625,1627,1629,1631],{"class":578,"line":579},[576,1618,590],{"class":589},[576,1620,594],{"class":593},[576,1622,598],{"class":597},[576,1624,601],{"class":593},[576,1626,604],{"class":589},[576,1628,607],{"class":593},[576,1630,611],{"class":610},[576,1632,614],{"class":593},[576,1634,1635,1637,1639,1642,1644,1646,1648,1651],{"class":578,"line":586},[576,1636,590],{"class":589},[576,1638,594],{"class":593},[576,1640,1641],{"class":597}," createOTLPDrain",[576,1643,601],{"class":593},[576,1645,604],{"class":589},[576,1647,607],{"class":593},[576,1649,1650],{"class":610},"evlog\u002Fotlp",[576,1652,614],{"class":593},[576,1654,1655],{"class":578,"line":617},[576,1656,621],{"emptyLinePlaceholder":620},[576,1658,1659,1661,1664,1666,1668],{"class":578,"line":624},[576,1660,1346],{"class":649},[576,1662,1663],{"class":597}," axiom ",[576,1665,1352],{"class":593},[576,1667,598],{"class":633},[576,1669,1366],{"class":597},[576,1671,1672,1674,1677,1679,1681],{"class":578,"line":656},[576,1673,1346],{"class":649},[576,1675,1676],{"class":597}," otlp ",[576,1678,1352],{"class":593},[576,1680,1641],{"class":633},[576,1682,1366],{"class":597},[576,1684,1685],{"class":578,"line":692},[576,1686,621],{"emptyLinePlaceholder":620},[576,1688,1689,1691,1693,1695,1698,1701,1704,1706,1708],{"class":578,"line":810},[576,1690,1346],{"class":649},[576,1692,1373],{"class":597},[576,1694,1352],{"class":593},[576,1696,1697],{"class":649}," async",[576,1699,1700],{"class":593}," (",[576,1702,1703],{"class":642},"ctx",[576,1705,646],{"class":593},[576,1707,650],{"class":649},[576,1709,653],{"class":593},[576,1711,1712,1715,1718,1720,1723,1726,1729,1731,1733,1735,1737,1740,1742,1744],{"class":578,"line":825},[576,1713,1714],{"class":589},"  await",[576,1716,1717],{"class":1360}," Promise",[576,1719,662],{"class":593},[576,1721,1722],{"class":633},"allSettled",[576,1724,1725],{"class":673},"([",[576,1727,1728],{"class":633},"axiom",[576,1730,637],{"class":673},[576,1732,1703],{"class":597},[576,1734,646],{"class":673},[576,1736,684],{"class":593},[576,1738,1739],{"class":633}," otlp",[576,1741,637],{"class":673},[576,1743,1703],{"class":597},[576,1745,1746],{"class":673},")])\n",[576,1748,1749],{"class":578,"line":1392},[576,1750,1751],{"class":593},"}\n",[535,1753,1754,1755,1757],{},"Then pass ",[550,1756,1239],{}," to your framework:",[563,1759,1760,1821,1910,1937,1963,1990,2016,2039],{},[566,1761,1763],{"className":568,"code":1762,"filename":570,"language":571,"meta":572,"style":572},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n",[550,1764,1765,1769,1789,1815],{"__ignoreMap":572},[576,1766,1767],{"class":578,"line":579},[576,1768,583],{"class":582},[576,1770,1771,1773,1775,1777,1779,1781,1783,1785,1787],{"class":578,"line":586},[576,1772,627],{"class":589},[576,1774,630],{"class":589},[576,1776,634],{"class":633},[576,1778,637],{"class":597},[576,1780,637],{"class":593},[576,1782,643],{"class":642},[576,1784,646],{"class":593},[576,1786,650],{"class":649},[576,1788,653],{"class":593},[576,1790,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813],{"class":578,"line":617},[576,1792,659],{"class":597},[576,1794,662],{"class":593},[576,1796,665],{"class":597},[576,1798,662],{"class":593},[576,1800,670],{"class":633},[576,1802,637],{"class":673},[576,1804,676],{"class":593},[576,1806,679],{"class":610},[576,1808,676],{"class":593},[576,1810,684],{"class":593},[576,1812,879],{"class":597},[576,1814,698],{"class":673},[576,1816,1817,1819],{"class":578,"line":624},[576,1818,695],{"class":593},[576,1820,698],{"class":597},[566,1822,1824],{"className":568,"code":1823,"filename":231,"language":571,"meta":572,"style":572},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain,\n})\n",[550,1825,1826,1830,1848,1852,1884,1898,1904],{"__ignoreMap":572},[576,1827,1828],{"class":578,"line":579},[576,1829,708],{"class":582},[576,1831,1832,1834,1836,1838,1840,1842,1844,1846],{"class":578,"line":586},[576,1833,590],{"class":589},[576,1835,594],{"class":593},[576,1837,717],{"class":597},[576,1839,601],{"class":593},[576,1841,604],{"class":589},[576,1843,607],{"class":593},[576,1845,726],{"class":610},[576,1847,614],{"class":593},[576,1849,1850],{"class":578,"line":617},[576,1851,621],{"emptyLinePlaceholder":620},[576,1853,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882],{"class":578,"line":624},[576,1855,627],{"class":589},[576,1857,757],{"class":649},[576,1859,594],{"class":593},[576,1861,762],{"class":597},[576,1863,684],{"class":593},[576,1865,767],{"class":597},[576,1867,684],{"class":593},[576,1869,772],{"class":597},[576,1871,684],{"class":593},[576,1873,777],{"class":597},[576,1875,695],{"class":593},[576,1877,782],{"class":593},[576,1879,717],{"class":633},[576,1881,637],{"class":597},[576,1883,789],{"class":593},[576,1885,1886,1888,1890,1892,1894,1896],{"class":578,"line":656},[576,1887,794],{"class":673},[576,1889,797],{"class":593},[576,1891,607],{"class":593},[576,1893,802],{"class":610},[576,1895,676],{"class":593},[576,1897,807],{"class":593},[576,1899,1900,1902],{"class":578,"line":692},[576,1901,813],{"class":597},[576,1903,807],{"class":593},[576,1905,1906,1908],{"class":578,"line":810},[576,1907,695],{"class":593},[576,1909,698],{"class":597},[566,1911,1913],{"className":568,"code":1912,"filename":261,"language":571,"meta":572,"style":572},"app.use(evlog({ drain }))\n",[550,1914,1915],{"__ignoreMap":572},[576,1916,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935],{"class":578,"line":579},[576,1918,861],{"class":597},[576,1920,662],{"class":593},[576,1922,866],{"class":633},[576,1924,637],{"class":597},[576,1926,871],{"class":633},[576,1928,637],{"class":597},[576,1930,876],{"class":593},[576,1932,1373],{"class":597},[576,1934,695],{"class":593},[576,1936,891],{"class":597},[566,1938,1939],{"className":568,"code":1912,"filename":256,"language":571,"meta":572,"style":572},[550,1940,1941],{"__ignoreMap":572},[576,1942,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961],{"class":578,"line":579},[576,1944,861],{"class":597},[576,1946,662],{"class":593},[576,1948,866],{"class":633},[576,1950,637],{"class":597},[576,1952,871],{"class":633},[576,1954,637],{"class":597},[576,1956,876],{"class":593},[576,1958,1373],{"class":597},[576,1960,695],{"class":593},[576,1962,891],{"class":597},[566,1964,1966],{"className":568,"code":1965,"filename":266,"language":571,"meta":572,"style":572},"await app.register(evlog, { drain })\n",[550,1967,1968],{"__ignoreMap":572},[576,1969,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988],{"class":578,"line":579},[576,1971,977],{"class":589},[576,1973,980],{"class":597},[576,1975,662],{"class":593},[576,1977,985],{"class":633},[576,1979,988],{"class":597},[576,1981,684],{"class":593},[576,1983,594],{"class":593},[576,1985,1373],{"class":597},[576,1987,695],{"class":593},[576,1989,698],{"class":597},[566,1991,1992],{"className":568,"code":1912,"filename":271,"language":571,"meta":572,"style":572},[550,1993,1994],{"__ignoreMap":572},[576,1995,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014],{"class":578,"line":579},[576,1997,861],{"class":597},[576,1999,662],{"class":593},[576,2001,866],{"class":633},[576,2003,637],{"class":597},[576,2005,871],{"class":633},[576,2007,637],{"class":597},[576,2009,876],{"class":593},[576,2011,1373],{"class":597},[576,2013,695],{"class":593},[576,2015,891],{"class":597},[566,2017,2019],{"className":568,"code":2018,"filename":251,"language":571,"meta":572,"style":572},"EvlogModule.forRoot({ drain })\n",[550,2020,2021],{"__ignoreMap":572},[576,2022,2023,2025,2027,2029,2031,2033,2035,2037],{"class":578,"line":579},[576,2024,1090],{"class":597},[576,2026,662],{"class":593},[576,2028,1095],{"class":633},[576,2030,637],{"class":597},[576,2032,876],{"class":593},[576,2034,1373],{"class":597},[576,2036,695],{"class":593},[576,2038,698],{"class":597},[566,2040,2042],{"className":568,"code":2041,"filename":286,"language":571,"meta":572,"style":572},"initLogger({ drain })\n",[550,2043,2044],{"__ignoreMap":572},[576,2045,2046,2048,2050,2052,2054,2056],{"class":578,"line":579},[576,2047,1143],{"class":633},[576,2049,637],{"class":597},[576,2051,876],{"class":593},[576,2053,1373],{"class":597},[576,2055,695],{"class":593},[576,2057,698],{"class":597},[542,2059,2061],{"id":2060},"drain-context","Drain Context",[535,2063,2064,2065,2067],{},"Every adapter receives a ",[550,2066,552],{}," with:",[2069,2070,2071,2087],"table",{},[2072,2073,2074],"thead",{},[2075,2076,2077,2081,2084],"tr",{},[2078,2079,2080],"th",{},"Field",[2078,2082,2083],{},"Type",[2078,2085,2086],{},"Description",[2088,2089,2090,2106,2131],"tbody",{},[2075,2091,2092,2098,2103],{},[2093,2094,2095],"td",{},[550,2096,2097],{},"event",[2093,2099,2100],{},[550,2101,2102],{},"WideEvent",[2093,2104,2105],{},"The complete log event with all accumulated context",[2075,2107,2108,2113,2118],{},[2093,2109,2110],{},[550,2111,2112],{},"request",[2093,2114,2115],{},[550,2116,2117],{},"object",[2093,2119,2120,2121,2124,2125,2124,2128,646],{},"Request metadata (",[550,2122,2123],{},"method",", ",[550,2126,2127],{},"path",[550,2129,2130],{},"requestId",[2075,2132,2133,2138,2142],{},[2093,2134,2135],{},[550,2136,2137],{},"headers",[2093,2139,2140],{},[550,2141,2117],{},[2093,2143,2144],{},"Safe HTTP headers (sensitive headers are filtered)",[1161,2146,2148,2151,2152,2124,2155,2124,2158,2161],{"color":2147,"icon":376},"success",[555,2149,2150],{},"Security:"," Sensitive headers (",[550,2153,2154],{},"authorization",[550,2156,2157],{},"cookie",[550,2159,2160],{},"x-api-key",", etc.) are automatically filtered and never passed to adapters.",[542,2163,2165],{"id":2164},"zero-config-setup","Zero-Config Setup",[535,2167,2168],{},"All adapters support automatic configuration via environment variables. No code changes needed when deploying to different environments.",[535,2170,2171],{},"Each adapter reads from standard environment variables, and the same names work in every framework:",[566,2173,2178],{"className":2174,"code":2175,"filename":2176,"language":2177,"meta":572,"style":572},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Axiom\nAXIOM_API_KEY=xaat-xxx\nAXIOM_DATASET=my-logs\n\n# OTLP\nOTLP_ENDPOINT=https:\u002F\u002Fotlp.example.com\n\n# HyperDX\nHYPERDX_API_KEY=\u003CYOUR_HYPERDX_API_KEY_HERE>\n\n# PostHog\nPOSTHOG_API_KEY=phc_xxx\n\n# Sentry\nSENTRY_DSN=https:\u002F\u002Fkey@o0.ingest.sentry.io\u002F123\n\n# Better Stack\nBETTER_STACK_API_KEY=your-source-token\n\n# Datadog\nDD_API_KEY=your-api-key\nDD_SITE=datadoghq.eu\n\n# Grafana Loki\nLOKI_ENDPOINT=http:\u002F\u002Flocalhost:3100\n# Grafana Cloud only:\nLOKI_USER=123456\nLOKI_API_KEY=glc_xxx\n\n# ClickHouse\nCLICKHOUSE_ENDPOINT=http:\u002F\u002Flocalhost:8123\nCLICKHOUSE_PASSWORD=your-password\n",".env","bash",[550,2179,2180,2185,2195,2205,2209,2214,2224,2228,2233,2247,2251,2256,2266,2270,2275,2285,2289,2294,2304,2308,2313,2324,2335,2340,2346,2357,2363,2374,2385,2390,2396,2407],{"__ignoreMap":572},[576,2181,2182],{"class":578,"line":579},[576,2183,2184],{"class":582},"# Axiom\n",[576,2186,2187,2190,2192],{"class":578,"line":586},[576,2188,2189],{"class":597},"AXIOM_API_KEY",[576,2191,1352],{"class":593},[576,2193,2194],{"class":610},"xaat-xxx\n",[576,2196,2197,2200,2202],{"class":578,"line":617},[576,2198,2199],{"class":597},"AXIOM_DATASET",[576,2201,1352],{"class":593},[576,2203,2204],{"class":610},"my-logs\n",[576,2206,2207],{"class":578,"line":624},[576,2208,621],{"emptyLinePlaceholder":620},[576,2210,2211],{"class":578,"line":656},[576,2212,2213],{"class":582},"# OTLP\n",[576,2215,2216,2219,2221],{"class":578,"line":692},[576,2217,2218],{"class":597},"OTLP_ENDPOINT",[576,2220,1352],{"class":593},[576,2222,2223],{"class":610},"https:\u002F\u002Fotlp.example.com\n",[576,2225,2226],{"class":578,"line":810},[576,2227,621],{"emptyLinePlaceholder":620},[576,2229,2230],{"class":578,"line":825},[576,2231,2232],{"class":582},"# HyperDX\n",[576,2234,2235,2238,2241,2244],{"class":578,"line":1392},[576,2236,2237],{"class":597},"HYPERDX_API_KEY",[576,2239,2240],{"class":593},"=\u003C",[576,2242,2243],{"class":610},"YOUR_HYPERDX_API_KEY_HERE",[576,2245,2246],{"class":593},">\n",[576,2248,2249],{"class":578,"line":1401},[576,2250,621],{"emptyLinePlaceholder":620},[576,2252,2253],{"class":578,"line":1426},[576,2254,2255],{"class":582},"# PostHog\n",[576,2257,2258,2261,2263],{"class":578,"line":1433},[576,2259,2260],{"class":597},"POSTHOG_API_KEY",[576,2262,1352],{"class":593},[576,2264,2265],{"class":610},"phc_xxx\n",[576,2267,2268],{"class":578,"line":1440},[576,2269,621],{"emptyLinePlaceholder":620},[576,2271,2272],{"class":578,"line":1445},[576,2273,2274],{"class":582},"# Sentry\n",[576,2276,2277,2280,2282],{"class":578,"line":1479},[576,2278,2279],{"class":597},"SENTRY_DSN",[576,2281,1352],{"class":593},[576,2283,2284],{"class":610},"https:\u002F\u002Fkey@o0.ingest.sentry.io\u002F123\n",[576,2286,2287],{"class":578,"line":1484},[576,2288,621],{"emptyLinePlaceholder":620},[576,2290,2291],{"class":578,"line":1530},[576,2292,2293],{"class":582},"# Better Stack\n",[576,2295,2296,2299,2301],{"class":578,"line":1558},[576,2297,2298],{"class":597},"BETTER_STACK_API_KEY",[576,2300,1352],{"class":593},[576,2302,2303],{"class":610},"your-source-token\n",[576,2305,2306],{"class":578,"line":1572},[576,2307,621],{"emptyLinePlaceholder":620},[576,2309,2310],{"class":578,"line":1577},[576,2311,2312],{"class":582},"# Datadog\n",[576,2314,2316,2319,2321],{"class":578,"line":2315},21,[576,2317,2318],{"class":597},"DD_API_KEY",[576,2320,1352],{"class":593},[576,2322,2323],{"class":610},"your-api-key\n",[576,2325,2327,2330,2332],{"class":578,"line":2326},22,[576,2328,2329],{"class":597},"DD_SITE",[576,2331,1352],{"class":593},[576,2333,2334],{"class":610},"datadoghq.eu\n",[576,2336,2338],{"class":578,"line":2337},23,[576,2339,621],{"emptyLinePlaceholder":620},[576,2341,2343],{"class":578,"line":2342},24,[576,2344,2345],{"class":582},"# Grafana Loki\n",[576,2347,2349,2352,2354],{"class":578,"line":2348},25,[576,2350,2351],{"class":597},"LOKI_ENDPOINT",[576,2353,1352],{"class":593},[576,2355,2356],{"class":610},"http:\u002F\u002Flocalhost:3100\n",[576,2358,2360],{"class":578,"line":2359},26,[576,2361,2362],{"class":582},"# Grafana Cloud only:\n",[576,2364,2366,2369,2371],{"class":578,"line":2365},27,[576,2367,2368],{"class":597},"LOKI_USER",[576,2370,1352],{"class":593},[576,2372,2373],{"class":610},"123456\n",[576,2375,2377,2380,2382],{"class":578,"line":2376},28,[576,2378,2379],{"class":597},"LOKI_API_KEY",[576,2381,1352],{"class":593},[576,2383,2384],{"class":610},"glc_xxx\n",[576,2386,2388],{"class":578,"line":2387},29,[576,2389,621],{"emptyLinePlaceholder":620},[576,2391,2393],{"class":578,"line":2392},30,[576,2394,2395],{"class":582},"# ClickHouse\n",[576,2397,2399,2402,2404],{"class":578,"line":2398},31,[576,2400,2401],{"class":597},"CLICKHOUSE_ENDPOINT",[576,2403,1352],{"class":593},[576,2405,2406],{"class":610},"http:\u002F\u002Flocalhost:8123\n",[576,2408,2410,2413,2415],{"class":578,"line":2409},32,[576,2411,2412],{"class":597},"CLICKHOUSE_PASSWORD",[576,2414,1352],{"class":593},[576,2416,2417],{"class":610},"your-password\n",[535,2419,2420,2421,2424],{},"Adapters auto-read from these variables, so a ",[550,2422,2423],{},"create*Drain()"," factory takes no arguments.",[542,2426,2428],{"id":2427},"missing-credentials","Missing credentials",[535,2430,2431],{},"Behavior depends on which API you call:",[2069,2433,2434,2443],{},[2072,2435,2436],{},[2075,2437,2438,2441],{},[2078,2439,2440],{},"API",[2078,2442,2428],{},[2088,2444,2445,2458],{},[2075,2446,2447,2452],{},[2093,2448,2449,2451],{},[550,2450,2423],{}," (factory)",[2093,2453,2454,2457],{},[550,2455,2456],{},"console.error"," + drain becomes a no-op — the HTTP response is never blocked",[2075,2459,2460,2470],{},[2093,2461,2462,2465,2466,2469],{},[550,2463,2464],{},"sendTo*"," \u002F ",[550,2467,2468],{},"sendBatchTo*"," (direct)",[2093,2471,2472],{},"Throws if required credentials are absent — caller must pass a complete config",[535,2474,2475],{},"This split is intentional: drains run fire-and-forget after each request; direct send helpers are for scripts and tests where a silent failure would hide misconfiguration.",[2477,2478,2479],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":572,"searchDepth":586,"depth":586,"links":2481},[2482,2483,2484,2485,2486,2487,2488],{"id":544,"depth":586,"text":545},{"id":1175,"depth":586,"text":1176},{"id":1232,"depth":586,"text":1233},{"id":1604,"depth":586,"text":1605},{"id":2060,"depth":586,"text":2061},{"id":2164,"depth":586,"text":2165},{"id":2427,"depth":586,"text":2428},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.","md",[2492,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504],{"label":147,"icon":150,"to":148,"color":1591,"variant":2493},"subtle",{"label":152,"icon":155,"to":153,"color":1591,"variant":2493},{"label":157,"icon":160,"to":158,"color":1591,"variant":2493},{"label":162,"icon":165,"to":163,"color":1591,"variant":2493},{"label":167,"icon":170,"to":168,"color":1591,"variant":2493},{"label":177,"icon":180,"to":178,"color":1591,"variant":2493},{"label":182,"icon":185,"to":183,"color":1591,"variant":2493},{"label":187,"icon":190,"to":188,"color":1591,"variant":2493},{"label":192,"icon":195,"to":193,"color":1591,"variant":2493},{"label":202,"icon":205,"to":203,"color":1591,"variant":2493},{"label":207,"icon":210,"to":208,"color":1591,"variant":2493},{"label":212,"icon":215,"to":213,"color":1591,"variant":2493},{},{"title":128,"icon":140},{"title":530,"description":2489},"rAwymUWDTuXVSLAMZamCIzhPVR9H1HCw8lR3-b_8dXg",[2510,2512],{"title":128,"path":129,"stem":130,"description":2511,"icon":131,"children":-1},"Pick a framework integration to capture requests, then pick adapters to ship events. Frameworks decide where the logger lives, adapters where events go.",{"title":147,"path":148,"stem":149,"description":2513,"icon":150,"children":-1},"Send wide events to Axiom for powerful querying, dashboards, and alerting. Zero-config setup with environment variables and automatic batching.",1786793457300]