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