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