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