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