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