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