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