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