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