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