[{"data":1,"prerenderedAt":3391},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-elysia":421,"-frameworks-elysia-surround":3386},[4,35,159,201,289,318,405],{"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,299,304,309,314],{"title":295,"path":296,"stem":297,"icon":298},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F1.identity-headers","i-lucide-fingerprint",{"title":300,"path":301,"stem":302,"icon":303},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F2.stream-api","i-lucide-radio-tower",{"title":305,"path":306,"stem":307,"icon":308},"SSE bridge","\u002Fbuild-on-top\u002Fsse-bridge","5.build-on-top\u002F3.sse-bridge","i-lucide-wifi",{"title":310,"path":311,"stem":312,"icon":313},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":315,"stem":316,"icon":317},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F4.recipes","i-lucide-chef-hat",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Adapters","\u002Fadapters","6.adapters",[323,326,366,381],{"title":41,"path":324,"stem":325,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[331,336,341,346,351,356,361],{"title":332,"path":333,"stem":334,"icon":335},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":337,"path":338,"stem":339,"icon":340},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":342,"path":343,"stem":344,"icon":345},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":347,"path":348,"stem":349,"icon":350},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":352,"path":353,"stem":354,"icon":355},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":357,"path":358,"stem":359,"icon":360},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":362,"path":363,"stem":364,"icon":365},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":367,"path":368,"stem":369,"children":370,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[371,376],{"title":372,"path":373,"stem":374,"icon":375},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":377,"path":378,"stem":379,"icon":380},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":382,"path":383,"stem":384,"children":385,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[386,391,396,400],{"title":387,"path":388,"stem":389,"icon":390},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":392,"path":393,"stem":394,"icon":395},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":397,"path":398,"stem":399,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":401,"path":402,"stem":403,"icon":404},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":406,"path":407,"stem":408,"children":409,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[410,413,417],{"title":41,"path":411,"stem":412,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":418,"path":419,"stem":420,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":422,"title":256,"body":423,"description":3376,"extension":3377,"links":3378,"meta":3382,"navigation":3383,"path":257,"seo":3384,"stem":258,"__hash__":3385},"docs\u002F4.frameworks\u002F10.elysia.md",{"type":424,"value":425,"toc":3353},"minimark",[426,443,490,494,499,579,583,872,896,904,907,910,1195,1198,1262,1265,1271,1454,1547,1563,1570,1580,1753,1757,1778,2148,2151,2217,2220,2230,2234,2237,2405,2409,2416,2607,2618,2622,2628,2732,2736,2747,2890,2894,2900,2904,3058,3062,3069,3245,3253,3257,3299,3307,3316,3320,3349],[427,428,429,430,434,435,438,439,442],"p",{},"The ",[431,432,433],"code",{},"evlog\u002Felysia"," plugin auto-creates a request-scoped logger accessible via ",[431,436,437],{},"log"," in route context and ",[431,440,441],{},"useLogger()",", emitting a wide event when the response completes.",[444,445,448,451,476],"prompt",{":actions":446,"description":447,"icon":259},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Elysia app",[427,449,450],{},"Set up evlog in my Elysia app.",[452,453,454,458,461,464,467,470,473],"ul",{},[455,456,457],"li",{},"Install evlog: pnpm add evlog",[455,459,460],{},"Call initLogger({ env: { service: 'my-api' } }) at startup",[455,462,463],{},"Alternatively, use evlog\u002Fvite plugin in vite.config.ts for auto-init (replaces initLogger)",[455,465,466],{},"Import evlog from 'evlog\u002Felysia' and add .use(evlog()) to your Elysia app",[455,468,469],{},"Access the logger via the log property in route context destructuring",[455,471,472],{},"Use useLogger() from 'evlog\u002Felysia' to access the logger from anywhere",[455,474,475],{},"Optionally pass drain, enrich, include, and keep options to evlog()",[427,477,478,479,485,486],{},"Docs: ",[480,481,482],"a",{"href":482,"rel":483},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Felysia",[484],"nofollow","\nAdapters: ",[480,487,488],{"href":488,"rel":489},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[484],[491,492,20],"h2",{"id":493},"quick-start",[495,496,498],"h3",{"id":497},"_1-install","1. Install",[500,501,502,530,546,562],"code-group",{},[503,504,510],"pre",{"className":505,"code":506,"filename":507,"language":508,"meta":509,"style":509},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog elysia\n","pnpm","bash","",[431,511,512],{"__ignoreMap":509},[513,514,517,520,524,527],"span",{"class":515,"line":516},"line",1,[513,518,507],{"class":519},"sBMFI",[513,521,523],{"class":522},"sfazB"," add",[513,525,526],{"class":522}," evlog",[513,528,529],{"class":522}," elysia\n",[503,531,534],{"className":505,"code":532,"filename":533,"language":508,"meta":509,"style":509},"bun add evlog elysia\n","bun",[431,535,536],{"__ignoreMap":509},[513,537,538,540,542,544],{"class":515,"line":516},[513,539,533],{"class":519},[513,541,523],{"class":522},[513,543,526],{"class":522},[513,545,529],{"class":522},[503,547,550],{"className":505,"code":548,"filename":549,"language":508,"meta":509,"style":509},"yarn add evlog elysia\n","yarn",[431,551,552],{"__ignoreMap":509},[513,553,554,556,558,560],{"class":515,"line":516},[513,555,549],{"class":519},[513,557,523],{"class":522},[513,559,526],{"class":522},[513,561,529],{"class":522},[503,563,566],{"className":505,"code":564,"filename":565,"language":508,"meta":509,"style":509},"npm install evlog elysia\n","npm",[431,567,568],{"__ignoreMap":509},[513,569,570,572,575,577],{"class":515,"line":516},[513,571,565],{"class":519},[513,573,574],{"class":522}," install",[513,576,526],{"class":522},[513,578,529],{"class":522},[495,580,582],{"id":581},"_2-initialize-and-register-the-plugin","2. Initialize and register the plugin",[503,584,589],{"className":585,"code":586,"filename":587,"language":588,"meta":509,"style":509},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Elysia } from 'elysia'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog\u002Felysia'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nconst app = new Elysia()\n  .use(evlog())\n  .get('\u002Fhealth', ({ log }) => {\n    log.set({ route: 'health' })\n    return { ok: true }\n  })\n  .listen(3000)\n","src\u002Findex.ts","typescript",[431,590,591,620,641,660,667,680,708,717,722,743,759,795,828,848,856],{"__ignoreMap":509},[513,592,593,597,601,605,608,611,614,617],{"class":515,"line":516},[513,594,596],{"class":595},"s7zQu","import",[513,598,600],{"class":599},"sMK4o"," {",[513,602,604],{"class":603},"sTEyZ"," Elysia",[513,606,607],{"class":599}," }",[513,609,610],{"class":595}," from",[513,612,613],{"class":599}," '",[513,615,616],{"class":522},"elysia",[513,618,619],{"class":599},"'\n",[513,621,623,625,627,630,632,634,636,639],{"class":515,"line":622},2,[513,624,596],{"class":595},[513,626,600],{"class":599},[513,628,629],{"class":603}," initLogger",[513,631,607],{"class":599},[513,633,610],{"class":595},[513,635,613],{"class":599},[513,637,638],{"class":522},"evlog",[513,640,619],{"class":599},[513,642,644,646,648,650,652,654,656,658],{"class":515,"line":643},3,[513,645,596],{"class":595},[513,647,600],{"class":599},[513,649,526],{"class":603},[513,651,607],{"class":599},[513,653,610],{"class":595},[513,655,613],{"class":599},[513,657,433],{"class":522},[513,659,619],{"class":599},[513,661,663],{"class":515,"line":662},4,[513,664,666],{"emptyLinePlaceholder":665},true,"\n",[513,668,670,674,677],{"class":515,"line":669},5,[513,671,673],{"class":672},"s2Zo4","initLogger",[513,675,676],{"class":603},"(",[513,678,679],{"class":599},"{\n",[513,681,683,687,690,692,695,697,699,702,705],{"class":515,"line":682},6,[513,684,686],{"class":685},"swJcz","  env",[513,688,689],{"class":599},":",[513,691,600],{"class":599},[513,693,694],{"class":685}," service",[513,696,689],{"class":599},[513,698,613],{"class":599},[513,700,701],{"class":522},"my-api",[513,703,704],{"class":599},"'",[513,706,707],{"class":599}," },\n",[513,709,711,714],{"class":515,"line":710},7,[513,712,713],{"class":599},"}",[513,715,716],{"class":603},")\n",[513,718,720],{"class":515,"line":719},8,[513,721,666],{"emptyLinePlaceholder":665},[513,723,725,729,732,735,738,740],{"class":515,"line":724},9,[513,726,728],{"class":727},"spNyl","const",[513,730,731],{"class":603}," app ",[513,733,734],{"class":599},"=",[513,736,737],{"class":599}," new",[513,739,604],{"class":672},[513,741,742],{"class":603},"()\n",[513,744,746,749,752,754,756],{"class":515,"line":745},10,[513,747,748],{"class":599},"  .",[513,750,751],{"class":672},"use",[513,753,676],{"class":603},[513,755,638],{"class":672},[513,757,758],{"class":603},"())\n",[513,760,762,764,767,769,771,774,776,779,782,786,789,792],{"class":515,"line":761},11,[513,763,748],{"class":599},[513,765,766],{"class":672},"get",[513,768,676],{"class":603},[513,770,704],{"class":599},[513,772,773],{"class":522},"\u002Fhealth",[513,775,704],{"class":599},[513,777,778],{"class":599},",",[513,780,781],{"class":599}," ({",[513,783,785],{"class":784},"sHdIc"," log",[513,787,788],{"class":599}," })",[513,790,791],{"class":727}," =>",[513,793,794],{"class":599}," {\n",[513,796,798,801,804,807,809,812,815,817,819,822,824,826],{"class":515,"line":797},12,[513,799,800],{"class":603},"    log",[513,802,803],{"class":599},".",[513,805,806],{"class":672},"set",[513,808,676],{"class":685},[513,810,811],{"class":599},"{",[513,813,814],{"class":685}," route",[513,816,689],{"class":599},[513,818,613],{"class":599},[513,820,821],{"class":522},"health",[513,823,704],{"class":599},[513,825,607],{"class":599},[513,827,716],{"class":685},[513,829,831,834,836,839,841,845],{"class":515,"line":830},13,[513,832,833],{"class":595},"    return",[513,835,600],{"class":599},[513,837,838],{"class":685}," ok",[513,840,689],{"class":599},[513,842,844],{"class":843},"sfNiH"," true",[513,846,847],{"class":599}," }\n",[513,849,851,854],{"class":515,"line":850},14,[513,852,853],{"class":599},"  }",[513,855,716],{"class":603},[513,857,859,861,864,866,870],{"class":515,"line":858},15,[513,860,748],{"class":599},[513,862,863],{"class":672},"listen",[513,865,676],{"class":603},[513,867,869],{"class":868},"sbssI","3000",[513,871,716],{"class":603},[873,874,876,880,881,887,888,891,892,895],"callout",{"color":875,"icon":195},"info",[877,878,879],"strong",{},"Using Vite?"," The ",[480,882,883,886],{"href":193},[431,884,885],{},"evlog\u002Fvite"," plugin"," replaces the ",[431,889,890],{},"initLogger()"," call with compile-time auto-initialization, strips ",[431,893,894],{},"log.debug()"," from production builds, and injects source locations.",[427,897,429,898,900,901,803],{},[431,899,437],{}," property is automatically available in all route handlers via Elysia's ",[431,902,903],{},"derive",[491,905,51],{"id":906},"wide-events",[427,908,909],{},"Build up context progressively through your handler. One request = one wide event:",[503,911,913],{"className":585,"code":912,"filename":587,"language":588,"meta":509,"style":509},"app.get('\u002Fusers\u002F:id', async ({ log, params }) => {\n  const userId = params.id\n\n  log.set({ user: { id: userId } })\n\n  const user = await db.findUser(userId)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  const orders = await db.findOrders(userId)\n  log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n  return { user, orders }\n})\n",[431,914,915,953,971,975,1008,1012,1038,1088,1092,1116,1170,1174,1189],{"__ignoreMap":509},[513,916,917,920,922,924,926,928,931,933,935,938,940,942,944,947,949,951],{"class":515,"line":516},[513,918,919],{"class":603},"app",[513,921,803],{"class":599},[513,923,766],{"class":672},[513,925,676],{"class":603},[513,927,704],{"class":599},[513,929,930],{"class":522},"\u002Fusers\u002F:id",[513,932,704],{"class":599},[513,934,778],{"class":599},[513,936,937],{"class":727}," async",[513,939,781],{"class":599},[513,941,785],{"class":784},[513,943,778],{"class":599},[513,945,946],{"class":784}," params",[513,948,788],{"class":599},[513,950,791],{"class":727},[513,952,794],{"class":599},[513,954,955,958,961,964,966,968],{"class":515,"line":622},[513,956,957],{"class":727},"  const",[513,959,960],{"class":603}," userId",[513,962,963],{"class":599}," =",[513,965,946],{"class":603},[513,967,803],{"class":599},[513,969,970],{"class":603},"id\n",[513,972,973],{"class":515,"line":643},[513,974,666],{"emptyLinePlaceholder":665},[513,976,977,980,982,984,986,988,991,993,995,998,1000,1002,1004,1006],{"class":515,"line":662},[513,978,979],{"class":603},"  log",[513,981,803],{"class":599},[513,983,806],{"class":672},[513,985,676],{"class":685},[513,987,811],{"class":599},[513,989,990],{"class":685}," user",[513,992,689],{"class":599},[513,994,600],{"class":599},[513,996,997],{"class":685}," id",[513,999,689],{"class":599},[513,1001,960],{"class":603},[513,1003,607],{"class":599},[513,1005,607],{"class":599},[513,1007,716],{"class":685},[513,1009,1010],{"class":515,"line":669},[513,1011,666],{"emptyLinePlaceholder":665},[513,1013,1014,1016,1018,1020,1023,1026,1028,1031,1033,1036],{"class":515,"line":682},[513,1015,957],{"class":727},[513,1017,990],{"class":603},[513,1019,963],{"class":599},[513,1021,1022],{"class":595}," await",[513,1024,1025],{"class":603}," db",[513,1027,803],{"class":599},[513,1029,1030],{"class":672},"findUser",[513,1032,676],{"class":685},[513,1034,1035],{"class":603},"userId",[513,1037,716],{"class":685},[513,1039,1040,1042,1044,1046,1048,1050,1052,1054,1056,1059,1061,1063,1065,1068,1070,1073,1075,1077,1079,1082,1084,1086],{"class":515,"line":710},[513,1041,979],{"class":603},[513,1043,803],{"class":599},[513,1045,806],{"class":672},[513,1047,676],{"class":685},[513,1049,811],{"class":599},[513,1051,990],{"class":685},[513,1053,689],{"class":599},[513,1055,600],{"class":599},[513,1057,1058],{"class":685}," name",[513,1060,689],{"class":599},[513,1062,990],{"class":603},[513,1064,803],{"class":599},[513,1066,1067],{"class":603},"name",[513,1069,778],{"class":599},[513,1071,1072],{"class":685}," plan",[513,1074,689],{"class":599},[513,1076,990],{"class":603},[513,1078,803],{"class":599},[513,1080,1081],{"class":603},"plan",[513,1083,607],{"class":599},[513,1085,607],{"class":599},[513,1087,716],{"class":685},[513,1089,1090],{"class":515,"line":719},[513,1091,666],{"emptyLinePlaceholder":665},[513,1093,1094,1096,1099,1101,1103,1105,1107,1110,1112,1114],{"class":515,"line":724},[513,1095,957],{"class":727},[513,1097,1098],{"class":603}," orders",[513,1100,963],{"class":599},[513,1102,1022],{"class":595},[513,1104,1025],{"class":603},[513,1106,803],{"class":599},[513,1108,1109],{"class":672},"findOrders",[513,1111,676],{"class":685},[513,1113,1035],{"class":603},[513,1115,716],{"class":685},[513,1117,1118,1120,1122,1124,1126,1128,1130,1132,1134,1137,1139,1141,1143,1146,1148,1151,1153,1156,1158,1161,1164,1166,1168],{"class":515,"line":745},[513,1119,979],{"class":603},[513,1121,803],{"class":599},[513,1123,806],{"class":672},[513,1125,676],{"class":685},[513,1127,811],{"class":599},[513,1129,1098],{"class":685},[513,1131,689],{"class":599},[513,1133,600],{"class":599},[513,1135,1136],{"class":685}," count",[513,1138,689],{"class":599},[513,1140,1098],{"class":603},[513,1142,803],{"class":599},[513,1144,1145],{"class":603},"length",[513,1147,778],{"class":599},[513,1149,1150],{"class":685}," totalRevenue",[513,1152,689],{"class":599},[513,1154,1155],{"class":672}," sum",[513,1157,676],{"class":685},[513,1159,1160],{"class":603},"orders",[513,1162,1163],{"class":685},") ",[513,1165,713],{"class":599},[513,1167,607],{"class":599},[513,1169,716],{"class":685},[513,1171,1172],{"class":515,"line":761},[513,1173,666],{"emptyLinePlaceholder":665},[513,1175,1176,1179,1181,1183,1185,1187],{"class":515,"line":797},[513,1177,1178],{"class":595},"  return",[513,1180,600],{"class":599},[513,1182,990],{"class":603},[513,1184,778],{"class":599},[513,1186,1098],{"class":603},[513,1188,847],{"class":599},[513,1190,1191,1193],{"class":515,"line":830},[513,1192,713],{"class":599},[513,1194,716],{"class":603},[427,1196,1197],{},"All fields are merged into a single wide event emitted when the request completes:",[503,1199,1202],{"className":505,"code":1200,"filename":1201,"language":508,"meta":509,"style":509},"14:58:15 INFO [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n  ├─ orders: count=2 totalRevenue=6298\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[431,1203,1204,1215,1235,1251],{"__ignoreMap":509},[513,1205,1206,1209,1212],{"class":515,"line":516},[513,1207,1208],{"class":519},"14:58:15",[513,1210,1211],{"class":522}," INFO",[513,1213,1214],{"class":603}," [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n",[513,1216,1217,1220,1223,1226,1229,1232],{"class":515,"line":622},[513,1218,1219],{"class":519},"  ├─",[513,1221,1222],{"class":522}," orders:",[513,1224,1225],{"class":522}," count=",[513,1227,1228],{"class":868},"2",[513,1230,1231],{"class":522}," totalRevenue=",[513,1233,1234],{"class":868},"6298\n",[513,1236,1237,1239,1242,1245,1248],{"class":515,"line":643},[513,1238,1219],{"class":519},[513,1240,1241],{"class":522}," user:",[513,1243,1244],{"class":522}," id=usr_123",[513,1246,1247],{"class":522}," name=Alice",[513,1249,1250],{"class":522}," plan=pro\n",[513,1252,1253,1256,1259],{"class":515,"line":662},[513,1254,1255],{"class":519},"  └─",[513,1257,1258],{"class":522}," requestId:",[513,1260,1261],{"class":522}," 4a8ff3a8-...\n",[491,1263,441],{"id":1264},"uselogger",[427,1266,1267,1268,1270],{},"Use ",[431,1269,441],{}," to access the request-scoped logger from anywhere in the call stack without passing the context through your service layer:",[503,1272,1275],{"className":585,"code":1273,"filename":1274,"language":588,"meta":509,"style":509},"import { useLogger } from 'evlog\u002Felysia'\n\nexport async function findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n\n  const user = await db.findUser(id)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  return user\n}\n","src\u002Fservices\u002Fuser.ts",[431,1276,1277,1296,1300,1328,1340,1366,1370,1392,1438,1442,1449],{"__ignoreMap":509},[513,1278,1279,1281,1283,1286,1288,1290,1292,1294],{"class":515,"line":516},[513,1280,596],{"class":595},[513,1282,600],{"class":599},[513,1284,1285],{"class":603}," useLogger",[513,1287,607],{"class":599},[513,1289,610],{"class":595},[513,1291,613],{"class":599},[513,1293,433],{"class":522},[513,1295,619],{"class":599},[513,1297,1298],{"class":515,"line":622},[513,1299,666],{"emptyLinePlaceholder":665},[513,1301,1302,1305,1307,1310,1313,1315,1318,1320,1323,1326],{"class":515,"line":643},[513,1303,1304],{"class":595},"export",[513,1306,937],{"class":727},[513,1308,1309],{"class":727}," function",[513,1311,1312],{"class":672}," findUser",[513,1314,676],{"class":599},[513,1316,1317],{"class":784},"id",[513,1319,689],{"class":599},[513,1321,1322],{"class":519}," string",[513,1324,1325],{"class":599},")",[513,1327,794],{"class":599},[513,1329,1330,1332,1334,1336,1338],{"class":515,"line":662},[513,1331,957],{"class":727},[513,1333,785],{"class":603},[513,1335,963],{"class":599},[513,1337,1285],{"class":672},[513,1339,742],{"class":685},[513,1341,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364],{"class":515,"line":669},[513,1343,979],{"class":603},[513,1345,803],{"class":599},[513,1347,806],{"class":672},[513,1349,676],{"class":685},[513,1351,811],{"class":599},[513,1353,990],{"class":685},[513,1355,689],{"class":599},[513,1357,600],{"class":599},[513,1359,997],{"class":603},[513,1361,607],{"class":599},[513,1363,607],{"class":599},[513,1365,716],{"class":685},[513,1367,1368],{"class":515,"line":682},[513,1369,666],{"emptyLinePlaceholder":665},[513,1371,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390],{"class":515,"line":710},[513,1373,957],{"class":727},[513,1375,990],{"class":603},[513,1377,963],{"class":599},[513,1379,1022],{"class":595},[513,1381,1025],{"class":603},[513,1383,803],{"class":599},[513,1385,1030],{"class":672},[513,1387,676],{"class":685},[513,1389,1317],{"class":603},[513,1391,716],{"class":685},[513,1393,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436],{"class":515,"line":719},[513,1395,979],{"class":603},[513,1397,803],{"class":599},[513,1399,806],{"class":672},[513,1401,676],{"class":685},[513,1403,811],{"class":599},[513,1405,990],{"class":685},[513,1407,689],{"class":599},[513,1409,600],{"class":599},[513,1411,1058],{"class":685},[513,1413,689],{"class":599},[513,1415,990],{"class":603},[513,1417,803],{"class":599},[513,1419,1067],{"class":603},[513,1421,778],{"class":599},[513,1423,1072],{"class":685},[513,1425,689],{"class":599},[513,1427,990],{"class":603},[513,1429,803],{"class":599},[513,1431,1081],{"class":603},[513,1433,607],{"class":599},[513,1435,607],{"class":599},[513,1437,716],{"class":685},[513,1439,1440],{"class":515,"line":724},[513,1441,666],{"emptyLinePlaceholder":665},[513,1443,1444,1446],{"class":515,"line":745},[513,1445,1178],{"class":595},[513,1447,1448],{"class":603}," user\n",[513,1450,1451],{"class":515,"line":761},[513,1452,1453],{"class":599},"}\n",[503,1455,1457],{"className":585,"code":1456,"filename":587,"language":588,"meta":509,"style":509},"import { findUser } from '.\u002Fservices\u002Fuser'\n\napp.get('\u002Fusers\u002F:id', async ({ params }) => {\n  const user = await findUser(params.id)\n  return user\n})\n",[431,1458,1459,1478,1482,1512,1535,1541],{"__ignoreMap":509},[513,1460,1461,1463,1465,1467,1469,1471,1473,1476],{"class":515,"line":516},[513,1462,596],{"class":595},[513,1464,600],{"class":599},[513,1466,1312],{"class":603},[513,1468,607],{"class":599},[513,1470,610],{"class":595},[513,1472,613],{"class":599},[513,1474,1475],{"class":522},".\u002Fservices\u002Fuser",[513,1477,619],{"class":599},[513,1479,1480],{"class":515,"line":622},[513,1481,666],{"emptyLinePlaceholder":665},[513,1483,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510],{"class":515,"line":643},[513,1485,919],{"class":603},[513,1487,803],{"class":599},[513,1489,766],{"class":672},[513,1491,676],{"class":603},[513,1493,704],{"class":599},[513,1495,930],{"class":522},[513,1497,704],{"class":599},[513,1499,778],{"class":599},[513,1501,937],{"class":727},[513,1503,781],{"class":599},[513,1505,946],{"class":784},[513,1507,788],{"class":599},[513,1509,791],{"class":727},[513,1511,794],{"class":599},[513,1513,1514,1516,1518,1520,1522,1524,1526,1529,1531,1533],{"class":515,"line":662},[513,1515,957],{"class":727},[513,1517,990],{"class":603},[513,1519,963],{"class":599},[513,1521,1022],{"class":595},[513,1523,1312],{"class":672},[513,1525,676],{"class":685},[513,1527,1528],{"class":603},"params",[513,1530,803],{"class":599},[513,1532,1317],{"class":603},[513,1534,716],{"class":685},[513,1536,1537,1539],{"class":515,"line":669},[513,1538,1178],{"class":595},[513,1540,1448],{"class":603},[513,1542,1543,1545],{"class":515,"line":682},[513,1544,713],{"class":599},[513,1546,716],{"class":603},[427,1548,1549,1550,1552,1553,1555,1556,1558,1559,1562],{},"Both ",[431,1551,437],{}," in context and ",[431,1554,441],{}," return the same logger instance. ",[431,1557,441],{}," uses ",[431,1560,1561],{},"AsyncLocalStorage"," to propagate the logger across async boundaries.",[491,1564,1566,1567,1325],{"id":1565},"background-work-logfork","Background work (",[431,1568,1569],{},"log.fork",[427,1571,1267,1572,1575,1576,803],{},[431,1573,1574],{},"log.fork(label, fn)"," from the route context for a child wide event. See ",[480,1577,1579],{"href":1578},"\u002Flogging\u002Fwide-events#after-emit-sealing-and-background-work","Wide events — After emit",[503,1581,1583],{"className":585,"code":1582,"filename":587,"language":588,"meta":509,"style":509},"import { evlog, useLogger } from 'evlog\u002Felysia'\n\napp\n  .use(evlog())\n  .post('\u002Forders', ({ log }) => {\n    log.fork!('ship', async () => {\n      const l = useLogger()\n      l.set({ shipped: true })\n    })\n    return { ok: true }\n  })\n",[431,1584,1585,1607,1611,1616,1628,1656,1688,1702,1726,1733,1747],{"__ignoreMap":509},[513,1586,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605],{"class":515,"line":516},[513,1588,596],{"class":595},[513,1590,600],{"class":599},[513,1592,526],{"class":603},[513,1594,778],{"class":599},[513,1596,1285],{"class":603},[513,1598,607],{"class":599},[513,1600,610],{"class":595},[513,1602,613],{"class":599},[513,1604,433],{"class":522},[513,1606,619],{"class":599},[513,1608,1609],{"class":515,"line":622},[513,1610,666],{"emptyLinePlaceholder":665},[513,1612,1613],{"class":515,"line":643},[513,1614,1615],{"class":603},"app\n",[513,1617,1618,1620,1622,1624,1626],{"class":515,"line":662},[513,1619,748],{"class":599},[513,1621,751],{"class":672},[513,1623,676],{"class":603},[513,1625,638],{"class":672},[513,1627,758],{"class":603},[513,1629,1630,1632,1635,1637,1639,1642,1644,1646,1648,1650,1652,1654],{"class":515,"line":669},[513,1631,748],{"class":599},[513,1633,1634],{"class":672},"post",[513,1636,676],{"class":603},[513,1638,704],{"class":599},[513,1640,1641],{"class":522},"\u002Forders",[513,1643,704],{"class":599},[513,1645,778],{"class":599},[513,1647,781],{"class":599},[513,1649,785],{"class":784},[513,1651,788],{"class":599},[513,1653,791],{"class":727},[513,1655,794],{"class":599},[513,1657,1658,1660,1662,1665,1668,1670,1672,1675,1677,1679,1681,1684,1686],{"class":515,"line":682},[513,1659,800],{"class":603},[513,1661,803],{"class":599},[513,1663,1664],{"class":672},"fork",[513,1666,1667],{"class":599},"!",[513,1669,676],{"class":685},[513,1671,704],{"class":599},[513,1673,1674],{"class":522},"ship",[513,1676,704],{"class":599},[513,1678,778],{"class":599},[513,1680,937],{"class":727},[513,1682,1683],{"class":599}," ()",[513,1685,791],{"class":727},[513,1687,794],{"class":599},[513,1689,1690,1693,1696,1698,1700],{"class":515,"line":710},[513,1691,1692],{"class":727},"      const",[513,1694,1695],{"class":603}," l",[513,1697,963],{"class":599},[513,1699,1285],{"class":672},[513,1701,742],{"class":685},[513,1703,1704,1707,1709,1711,1713,1715,1718,1720,1722,1724],{"class":515,"line":719},[513,1705,1706],{"class":603},"      l",[513,1708,803],{"class":599},[513,1710,806],{"class":672},[513,1712,676],{"class":685},[513,1714,811],{"class":599},[513,1716,1717],{"class":685}," shipped",[513,1719,689],{"class":599},[513,1721,844],{"class":843},[513,1723,607],{"class":599},[513,1725,716],{"class":685},[513,1727,1728,1731],{"class":515,"line":724},[513,1729,1730],{"class":599},"    }",[513,1732,716],{"class":685},[513,1734,1735,1737,1739,1741,1743,1745],{"class":515,"line":745},[513,1736,833],{"class":595},[513,1738,600],{"class":599},[513,1740,838],{"class":685},[513,1742,689],{"class":599},[513,1744,844],{"class":843},[513,1746,847],{"class":599},[513,1748,1749,1751],{"class":515,"line":761},[513,1750,853],{"class":599},[513,1752,716],{"class":603},[491,1754,1756],{"id":1755},"error-handling","Error Handling",[427,1758,1267,1759,1762,1763,1766,1767,1770,1771,1774,1775,689],{},[431,1760,1761],{},"createError"," for structured errors with ",[431,1764,1765],{},"why",", ",[431,1768,1769],{},"fix",", and ",[431,1772,1773],{},"link"," fields. Elysia captures thrown errors via ",[431,1776,1777],{},"onError",[503,1779,1781],{"className":585,"code":1780,"filename":587,"language":588,"meta":509,"style":509},"import { createError, parseError } from 'evlog'\n\napp\n  .use(evlog())\n  .get('\u002Fcheckout', ({ log }) => {\n    log.set({ cart: { items: 3, total: 9999 } })\n\n    throw createError({\n      message: 'Payment failed',\n      status: 402,\n      why: 'Card declined by issuer',\n      fix: 'Try a different payment method',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n    })\n  })\n  .onError(({ error, set }) => {\n    const parsed = parseError(error)\n    set.status = parsed.status\n    return {\n      message: parsed.message,\n      why: parsed.why,\n      fix: parsed.fix,\n      link: parsed.link,\n    }\n  })\n",[431,1782,1783,1807,1811,1815,1827,1854,1897,1901,1912,1929,1941,1957,1973,1989,1995,2001,2027,2047,2067,2074,2090,2105,2120,2135,2141],{"__ignoreMap":509},[513,1784,1785,1787,1789,1792,1794,1797,1799,1801,1803,1805],{"class":515,"line":516},[513,1786,596],{"class":595},[513,1788,600],{"class":599},[513,1790,1791],{"class":603}," createError",[513,1793,778],{"class":599},[513,1795,1796],{"class":603}," parseError",[513,1798,607],{"class":599},[513,1800,610],{"class":595},[513,1802,613],{"class":599},[513,1804,638],{"class":522},[513,1806,619],{"class":599},[513,1808,1809],{"class":515,"line":622},[513,1810,666],{"emptyLinePlaceholder":665},[513,1812,1813],{"class":515,"line":643},[513,1814,1615],{"class":603},[513,1816,1817,1819,1821,1823,1825],{"class":515,"line":662},[513,1818,748],{"class":599},[513,1820,751],{"class":672},[513,1822,676],{"class":603},[513,1824,638],{"class":672},[513,1826,758],{"class":603},[513,1828,1829,1831,1833,1835,1837,1840,1842,1844,1846,1848,1850,1852],{"class":515,"line":669},[513,1830,748],{"class":599},[513,1832,766],{"class":672},[513,1834,676],{"class":603},[513,1836,704],{"class":599},[513,1838,1839],{"class":522},"\u002Fcheckout",[513,1841,704],{"class":599},[513,1843,778],{"class":599},[513,1845,781],{"class":599},[513,1847,785],{"class":784},[513,1849,788],{"class":599},[513,1851,791],{"class":727},[513,1853,794],{"class":599},[513,1855,1856,1858,1860,1862,1864,1866,1869,1871,1873,1876,1878,1881,1883,1886,1888,1891,1893,1895],{"class":515,"line":682},[513,1857,800],{"class":603},[513,1859,803],{"class":599},[513,1861,806],{"class":672},[513,1863,676],{"class":685},[513,1865,811],{"class":599},[513,1867,1868],{"class":685}," cart",[513,1870,689],{"class":599},[513,1872,600],{"class":599},[513,1874,1875],{"class":685}," items",[513,1877,689],{"class":599},[513,1879,1880],{"class":868}," 3",[513,1882,778],{"class":599},[513,1884,1885],{"class":685}," total",[513,1887,689],{"class":599},[513,1889,1890],{"class":868}," 9999",[513,1892,607],{"class":599},[513,1894,607],{"class":599},[513,1896,716],{"class":685},[513,1898,1899],{"class":515,"line":710},[513,1900,666],{"emptyLinePlaceholder":665},[513,1902,1903,1906,1908,1910],{"class":515,"line":719},[513,1904,1905],{"class":595},"    throw",[513,1907,1791],{"class":672},[513,1909,676],{"class":685},[513,1911,679],{"class":599},[513,1913,1914,1917,1919,1921,1924,1926],{"class":515,"line":724},[513,1915,1916],{"class":685},"      message",[513,1918,689],{"class":599},[513,1920,613],{"class":599},[513,1922,1923],{"class":522},"Payment failed",[513,1925,704],{"class":599},[513,1927,1928],{"class":599},",\n",[513,1930,1931,1934,1936,1939],{"class":515,"line":745},[513,1932,1933],{"class":685},"      status",[513,1935,689],{"class":599},[513,1937,1938],{"class":868}," 402",[513,1940,1928],{"class":599},[513,1942,1943,1946,1948,1950,1953,1955],{"class":515,"line":761},[513,1944,1945],{"class":685},"      why",[513,1947,689],{"class":599},[513,1949,613],{"class":599},[513,1951,1952],{"class":522},"Card declined by issuer",[513,1954,704],{"class":599},[513,1956,1928],{"class":599},[513,1958,1959,1962,1964,1966,1969,1971],{"class":515,"line":797},[513,1960,1961],{"class":685},"      fix",[513,1963,689],{"class":599},[513,1965,613],{"class":599},[513,1967,1968],{"class":522},"Try a different payment method",[513,1970,704],{"class":599},[513,1972,1928],{"class":599},[513,1974,1975,1978,1980,1982,1985,1987],{"class":515,"line":830},[513,1976,1977],{"class":685},"      link",[513,1979,689],{"class":599},[513,1981,613],{"class":599},[513,1983,1984],{"class":522},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[513,1986,704],{"class":599},[513,1988,1928],{"class":599},[513,1990,1991,1993],{"class":515,"line":850},[513,1992,1730],{"class":599},[513,1994,716],{"class":685},[513,1996,1997,1999],{"class":515,"line":858},[513,1998,853],{"class":599},[513,2000,716],{"class":603},[513,2002,2004,2006,2008,2010,2013,2016,2018,2021,2023,2025],{"class":515,"line":2003},16,[513,2005,748],{"class":599},[513,2007,1777],{"class":672},[513,2009,676],{"class":603},[513,2011,2012],{"class":599},"({",[513,2014,2015],{"class":784}," error",[513,2017,778],{"class":599},[513,2019,2020],{"class":784}," set",[513,2022,788],{"class":599},[513,2024,791],{"class":727},[513,2026,794],{"class":599},[513,2028,2030,2033,2036,2038,2040,2042,2045],{"class":515,"line":2029},17,[513,2031,2032],{"class":727},"    const",[513,2034,2035],{"class":603}," parsed",[513,2037,963],{"class":599},[513,2039,1796],{"class":672},[513,2041,676],{"class":685},[513,2043,2044],{"class":603},"error",[513,2046,716],{"class":685},[513,2048,2050,2053,2055,2058,2060,2062,2064],{"class":515,"line":2049},18,[513,2051,2052],{"class":603},"    set",[513,2054,803],{"class":599},[513,2056,2057],{"class":603},"status",[513,2059,963],{"class":599},[513,2061,2035],{"class":603},[513,2063,803],{"class":599},[513,2065,2066],{"class":603},"status\n",[513,2068,2070,2072],{"class":515,"line":2069},19,[513,2071,833],{"class":595},[513,2073,794],{"class":599},[513,2075,2077,2079,2081,2083,2085,2088],{"class":515,"line":2076},20,[513,2078,1916],{"class":685},[513,2080,689],{"class":599},[513,2082,2035],{"class":603},[513,2084,803],{"class":599},[513,2086,2087],{"class":603},"message",[513,2089,1928],{"class":599},[513,2091,2093,2095,2097,2099,2101,2103],{"class":515,"line":2092},21,[513,2094,1945],{"class":685},[513,2096,689],{"class":599},[513,2098,2035],{"class":603},[513,2100,803],{"class":599},[513,2102,1765],{"class":603},[513,2104,1928],{"class":599},[513,2106,2108,2110,2112,2114,2116,2118],{"class":515,"line":2107},22,[513,2109,1961],{"class":685},[513,2111,689],{"class":599},[513,2113,2035],{"class":603},[513,2115,803],{"class":599},[513,2117,1769],{"class":603},[513,2119,1928],{"class":599},[513,2121,2123,2125,2127,2129,2131,2133],{"class":515,"line":2122},23,[513,2124,1977],{"class":685},[513,2126,689],{"class":599},[513,2128,2035],{"class":603},[513,2130,803],{"class":599},[513,2132,1773],{"class":603},[513,2134,1928],{"class":599},[513,2136,2138],{"class":515,"line":2137},24,[513,2139,2140],{"class":599},"    }\n",[513,2142,2144,2146],{"class":515,"line":2143},25,[513,2145,853],{"class":599},[513,2147,716],{"class":603},[427,2149,2150],{},"The error is captured and logged with both the custom context and structured error fields:",[503,2152,2154],{"className":505,"code":2153,"filename":1201,"language":508,"meta":509,"style":509},"14:58:20 ERROR [my-api] GET \u002Fcheckout 402 in 3ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  ├─ cart: items=3 total=9999\n  └─ requestId: 880a50ac-...\n",[431,2155,2156,2167,2189,2208],{"__ignoreMap":509},[513,2157,2158,2161,2164],{"class":515,"line":516},[513,2159,2160],{"class":519},"14:58:20",[513,2162,2163],{"class":522}," ERROR",[513,2165,2166],{"class":603}," [my-api] GET \u002Fcheckout 402 in 3ms\n",[513,2168,2169,2171,2174,2177,2180,2183,2186],{"class":515,"line":622},[513,2170,1219],{"class":519},[513,2172,2173],{"class":522}," error:",[513,2175,2176],{"class":522}," name=EvlogError",[513,2178,2179],{"class":522}," message=Payment",[513,2181,2182],{"class":522}," failed",[513,2184,2185],{"class":522}," status=",[513,2187,2188],{"class":868},"402\n",[513,2190,2191,2193,2196,2199,2202,2205],{"class":515,"line":643},[513,2192,1219],{"class":519},[513,2194,2195],{"class":522}," cart:",[513,2197,2198],{"class":522}," items=",[513,2200,2201],{"class":868},"3",[513,2203,2204],{"class":522}," total=",[513,2206,2207],{"class":868},"9999\n",[513,2209,2210,2212,2214],{"class":515,"line":662},[513,2211,1255],{"class":519},[513,2213,1258],{"class":522},[513,2215,2216],{"class":522}," 880a50ac-...\n",[491,2218,170],{"id":2219},"configuration",[427,2221,2222,2223,2226,2227,2229],{},"See the ",[480,2224,2225],{"href":171},"Configuration reference"," for all available options (",[431,2228,673],{},", middleware options, sampling, silent mode, etc.).",[491,2231,2233],{"id":2232},"drain-enrichers","Drain & Enrichers",[427,2235,2236],{},"Configure drain adapters and enrichers directly in the plugin options:",[503,2238,2240],{"className":585,"code":2239,"filename":587,"language":588,"meta":509,"style":509},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\nconst userAgent = createUserAgentEnricher()\n\napp.use(evlog({\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n}))\n",[431,2241,2242,2262,2282,2286,2299,2303,2319,2333,2352,2363,2393,2398],{"__ignoreMap":509},[513,2243,2244,2246,2248,2251,2253,2255,2257,2260],{"class":515,"line":516},[513,2245,596],{"class":595},[513,2247,600],{"class":599},[513,2249,2250],{"class":603}," createAxiomDrain",[513,2252,607],{"class":599},[513,2254,610],{"class":595},[513,2256,613],{"class":599},[513,2258,2259],{"class":522},"evlog\u002Faxiom",[513,2261,619],{"class":599},[513,2263,2264,2266,2268,2271,2273,2275,2277,2280],{"class":515,"line":622},[513,2265,596],{"class":595},[513,2267,600],{"class":599},[513,2269,2270],{"class":603}," createUserAgentEnricher",[513,2272,607],{"class":599},[513,2274,610],{"class":595},[513,2276,613],{"class":599},[513,2278,2279],{"class":522},"evlog\u002Fenrichers",[513,2281,619],{"class":599},[513,2283,2284],{"class":515,"line":643},[513,2285,666],{"emptyLinePlaceholder":665},[513,2287,2288,2290,2293,2295,2297],{"class":515,"line":662},[513,2289,728],{"class":727},[513,2291,2292],{"class":603}," userAgent ",[513,2294,734],{"class":599},[513,2296,2270],{"class":672},[513,2298,742],{"class":603},[513,2300,2301],{"class":515,"line":669},[513,2302,666],{"emptyLinePlaceholder":665},[513,2304,2305,2307,2309,2311,2313,2315,2317],{"class":515,"line":682},[513,2306,919],{"class":603},[513,2308,803],{"class":599},[513,2310,751],{"class":672},[513,2312,676],{"class":603},[513,2314,638],{"class":672},[513,2316,676],{"class":603},[513,2318,679],{"class":599},[513,2320,2321,2324,2326,2328,2331],{"class":515,"line":710},[513,2322,2323],{"class":685},"  drain",[513,2325,689],{"class":599},[513,2327,2250],{"class":672},[513,2329,2330],{"class":603},"()",[513,2332,1928],{"class":599},[513,2334,2335,2338,2340,2343,2346,2348,2350],{"class":515,"line":719},[513,2336,2337],{"class":672},"  enrich",[513,2339,689],{"class":599},[513,2341,2342],{"class":599}," (",[513,2344,2345],{"class":784},"ctx",[513,2347,1325],{"class":599},[513,2349,791],{"class":727},[513,2351,794],{"class":599},[513,2353,2354,2357,2359,2361],{"class":515,"line":724},[513,2355,2356],{"class":672},"    userAgent",[513,2358,676],{"class":685},[513,2360,2345],{"class":603},[513,2362,716],{"class":685},[513,2364,2365,2368,2370,2373,2375,2378,2380,2383,2385,2388,2390],{"class":515,"line":745},[513,2366,2367],{"class":603},"    ctx",[513,2369,803],{"class":599},[513,2371,2372],{"class":603},"event",[513,2374,803],{"class":599},[513,2376,2377],{"class":603},"region",[513,2379,963],{"class":599},[513,2381,2382],{"class":603}," process",[513,2384,803],{"class":599},[513,2386,2387],{"class":603},"env",[513,2389,803],{"class":599},[513,2391,2392],{"class":603},"FLY_REGION\n",[513,2394,2395],{"class":515,"line":761},[513,2396,2397],{"class":599},"  },\n",[513,2399,2400,2402],{"class":515,"line":797},[513,2401,713],{"class":599},[513,2403,2404],{"class":603},"))\n",[495,2406,2408],{"id":2407},"pipeline-batching-retry","Pipeline (Batching & Retry)",[427,2410,2411,2412,2415],{},"For production, wrap your adapter with ",[431,2413,2414],{},"createDrainPipeline"," to batch events and retry on failure:",[503,2417,2419],{"className":585,"code":2418,"filename":587,"language":588,"meta":509,"style":509},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n",[431,2420,2421,2443,2461,2481,2485,2509,2538,2556,2562,2581,2585],{"__ignoreMap":509},[513,2422,2423,2425,2428,2430,2433,2435,2437,2439,2441],{"class":515,"line":516},[513,2424,596],{"class":595},[513,2426,2427],{"class":595}," type",[513,2429,600],{"class":599},[513,2431,2432],{"class":603}," DrainContext",[513,2434,607],{"class":599},[513,2436,610],{"class":595},[513,2438,613],{"class":599},[513,2440,638],{"class":522},[513,2442,619],{"class":599},[513,2444,2445,2447,2449,2451,2453,2455,2457,2459],{"class":515,"line":622},[513,2446,596],{"class":595},[513,2448,600],{"class":599},[513,2450,2250],{"class":603},[513,2452,607],{"class":599},[513,2454,610],{"class":595},[513,2456,613],{"class":599},[513,2458,2259],{"class":522},[513,2460,619],{"class":599},[513,2462,2463,2465,2467,2470,2472,2474,2476,2479],{"class":515,"line":643},[513,2464,596],{"class":595},[513,2466,600],{"class":599},[513,2468,2469],{"class":603}," createDrainPipeline",[513,2471,607],{"class":599},[513,2473,610],{"class":595},[513,2475,613],{"class":599},[513,2477,2478],{"class":522},"evlog\u002Fpipeline",[513,2480,619],{"class":599},[513,2482,2483],{"class":515,"line":662},[513,2484,666],{"emptyLinePlaceholder":665},[513,2486,2487,2489,2492,2494,2496,2499,2502,2505,2507],{"class":515,"line":669},[513,2488,728],{"class":727},[513,2490,2491],{"class":603}," pipeline ",[513,2493,734],{"class":599},[513,2495,2469],{"class":672},[513,2497,2498],{"class":599},"\u003C",[513,2500,2501],{"class":519},"DrainContext",[513,2503,2504],{"class":599},">",[513,2506,676],{"class":603},[513,2508,679],{"class":599},[513,2510,2511,2514,2516,2518,2521,2523,2526,2528,2531,2533,2536],{"class":515,"line":682},[513,2512,2513],{"class":685},"  batch",[513,2515,689],{"class":599},[513,2517,600],{"class":599},[513,2519,2520],{"class":685}," size",[513,2522,689],{"class":599},[513,2524,2525],{"class":868}," 50",[513,2527,778],{"class":599},[513,2529,2530],{"class":685}," intervalMs",[513,2532,689],{"class":599},[513,2534,2535],{"class":868}," 5000",[513,2537,707],{"class":599},[513,2539,2540,2543,2545,2547,2550,2552,2554],{"class":515,"line":710},[513,2541,2542],{"class":685},"  retry",[513,2544,689],{"class":599},[513,2546,600],{"class":599},[513,2548,2549],{"class":685}," maxAttempts",[513,2551,689],{"class":599},[513,2553,1880],{"class":868},[513,2555,707],{"class":599},[513,2557,2558,2560],{"class":515,"line":719},[513,2559,713],{"class":599},[513,2561,716],{"class":603},[513,2563,2564,2566,2569,2571,2574,2576,2579],{"class":515,"line":724},[513,2565,728],{"class":727},[513,2567,2568],{"class":603}," drain ",[513,2570,734],{"class":599},[513,2572,2573],{"class":672}," pipeline",[513,2575,676],{"class":603},[513,2577,2578],{"class":672},"createAxiomDrain",[513,2580,758],{"class":603},[513,2582,2583],{"class":515,"line":745},[513,2584,666],{"emptyLinePlaceholder":665},[513,2586,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605],{"class":515,"line":761},[513,2588,919],{"class":603},[513,2590,803],{"class":599},[513,2592,751],{"class":672},[513,2594,676],{"class":603},[513,2596,638],{"class":672},[513,2598,676],{"class":603},[513,2600,811],{"class":599},[513,2602,2568],{"class":603},[513,2604,713],{"class":599},[513,2606,2404],{"class":603},[873,2608,2609,2610,2613,2614,2617],{"color":875,"icon":13},"Call ",[431,2611,2612],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[480,2615,2616],{"href":388},"Pipeline docs"," for all options.",[491,2619,2621],{"id":2620},"tail-sampling","Tail Sampling",[427,2623,1267,2624,2627],{},[431,2625,2626],{},"keep"," to force-retain specific events regardless of head sampling:",[503,2629,2631],{"className":585,"code":2630,"filename":587,"language":588,"meta":509,"style":509},"app.use(evlog({\n  drain: createAxiomDrain(),\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n}))\n",[431,2632,2633,2649,2661,2678,2722,2726],{"__ignoreMap":509},[513,2634,2635,2637,2639,2641,2643,2645,2647],{"class":515,"line":516},[513,2636,919],{"class":603},[513,2638,803],{"class":599},[513,2640,751],{"class":672},[513,2642,676],{"class":603},[513,2644,638],{"class":672},[513,2646,676],{"class":603},[513,2648,679],{"class":599},[513,2650,2651,2653,2655,2657,2659],{"class":515,"line":622},[513,2652,2323],{"class":685},[513,2654,689],{"class":599},[513,2656,2250],{"class":672},[513,2658,2330],{"class":603},[513,2660,1928],{"class":599},[513,2662,2663,2666,2668,2670,2672,2674,2676],{"class":515,"line":643},[513,2664,2665],{"class":672},"  keep",[513,2667,689],{"class":599},[513,2669,2342],{"class":599},[513,2671,2345],{"class":784},[513,2673,1325],{"class":599},[513,2675,791],{"class":727},[513,2677,794],{"class":599},[513,2679,2680,2683,2685,2687,2689,2692,2695,2698,2700,2702,2705,2708,2710,2712,2714,2717,2719],{"class":515,"line":662},[513,2681,2682],{"class":595},"    if",[513,2684,2342],{"class":685},[513,2686,2345],{"class":603},[513,2688,803],{"class":599},[513,2690,2691],{"class":603},"duration",[513,2693,2694],{"class":599}," &&",[513,2696,2697],{"class":603}," ctx",[513,2699,803],{"class":599},[513,2701,2691],{"class":603},[513,2703,2704],{"class":599}," >",[513,2706,2707],{"class":868}," 2000",[513,2709,1163],{"class":685},[513,2711,2345],{"class":603},[513,2713,803],{"class":599},[513,2715,2716],{"class":603},"shouldKeep",[513,2718,963],{"class":599},[513,2720,2721],{"class":843}," true\n",[513,2723,2724],{"class":515,"line":669},[513,2725,2397],{"class":599},[513,2727,2728,2730],{"class":515,"line":682},[513,2729,713],{"class":599},[513,2731,2404],{"class":603},[491,2733,2735],{"id":2734},"route-filtering","Route Filtering",[427,2737,2738,2739,2742,2743,2746],{},"Control which routes are logged with ",[431,2740,2741],{},"include"," and ",[431,2744,2745],{},"exclude"," patterns:",[503,2748,2750],{"className":585,"code":2749,"filename":587,"language":588,"meta":509,"style":509},"app.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002F_internal\u002F**', '\u002Fhealth'],\n  routes: {\n    '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n  },\n}))\n",[431,2751,2752,2768,2790,2818,2827,2854,2880,2884],{"__ignoreMap":509},[513,2753,2754,2756,2758,2760,2762,2764,2766],{"class":515,"line":516},[513,2755,919],{"class":603},[513,2757,803],{"class":599},[513,2759,751],{"class":672},[513,2761,676],{"class":603},[513,2763,638],{"class":672},[513,2765,676],{"class":603},[513,2767,679],{"class":599},[513,2769,2770,2773,2775,2778,2780,2783,2785,2788],{"class":515,"line":622},[513,2771,2772],{"class":685},"  include",[513,2774,689],{"class":599},[513,2776,2777],{"class":603}," [",[513,2779,704],{"class":599},[513,2781,2782],{"class":522},"\u002Fapi\u002F**",[513,2784,704],{"class":599},[513,2786,2787],{"class":603},"]",[513,2789,1928],{"class":599},[513,2791,2792,2795,2797,2799,2801,2804,2806,2808,2810,2812,2814,2816],{"class":515,"line":643},[513,2793,2794],{"class":685},"  exclude",[513,2796,689],{"class":599},[513,2798,2777],{"class":603},[513,2800,704],{"class":599},[513,2802,2803],{"class":522},"\u002F_internal\u002F**",[513,2805,704],{"class":599},[513,2807,778],{"class":599},[513,2809,613],{"class":599},[513,2811,773],{"class":522},[513,2813,704],{"class":599},[513,2815,2787],{"class":603},[513,2817,1928],{"class":599},[513,2819,2820,2823,2825],{"class":515,"line":662},[513,2821,2822],{"class":685},"  routes",[513,2824,689],{"class":599},[513,2826,794],{"class":599},[513,2828,2829,2832,2835,2837,2839,2841,2843,2845,2847,2850,2852],{"class":515,"line":669},[513,2830,2831],{"class":599},"    '",[513,2833,2834],{"class":685},"\u002Fapi\u002Fauth\u002F**",[513,2836,704],{"class":599},[513,2838,689],{"class":599},[513,2840,600],{"class":599},[513,2842,694],{"class":685},[513,2844,689],{"class":599},[513,2846,613],{"class":599},[513,2848,2849],{"class":522},"auth-service",[513,2851,704],{"class":599},[513,2853,707],{"class":599},[513,2855,2856,2858,2861,2863,2865,2867,2869,2871,2873,2876,2878],{"class":515,"line":682},[513,2857,2831],{"class":599},[513,2859,2860],{"class":685},"\u002Fapi\u002Fpayment\u002F**",[513,2862,704],{"class":599},[513,2864,689],{"class":599},[513,2866,600],{"class":599},[513,2868,694],{"class":685},[513,2870,689],{"class":599},[513,2872,613],{"class":599},[513,2874,2875],{"class":522},"payment-service",[513,2877,704],{"class":599},[513,2879,707],{"class":599},[513,2881,2882],{"class":515,"line":710},[513,2883,2397],{"class":599},[513,2885,2886,2888],{"class":515,"line":719},[513,2887,713],{"class":599},[513,2889,2404],{"class":603},[491,2891,2893],{"id":2892},"client-side-logging","Client-Side Logging",[427,2895,1267,2896,2899],{},[431,2897,2898],{},"evlog\u002Fhttp"," to send structured logs from any frontend to your Elysia server. This works with any client framework (React, Vue, Svelte, vanilla JS).",[495,2901,2903],{"id":2902},"browser-setup","Browser setup",[503,2905,2908],{"className":585,"code":2906,"filename":2907,"language":588,"meta":509,"style":509},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\n  drain: { endpoint: '\u002Fv1\u002Fingest' },\n})\ninitLogger({ drain })\n\nlog.info({ action: 'page_view', path: location.pathname })\n","client.ts",[431,2909,2910,2932,2951,2955,2969,2991,2997,3011,3015],{"__ignoreMap":509},[513,2911,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930],{"class":515,"line":516},[513,2913,596],{"class":595},[513,2915,600],{"class":599},[513,2917,629],{"class":603},[513,2919,778],{"class":599},[513,2921,785],{"class":603},[513,2923,607],{"class":599},[513,2925,610],{"class":595},[513,2927,613],{"class":599},[513,2929,638],{"class":522},[513,2931,619],{"class":599},[513,2933,2934,2936,2938,2941,2943,2945,2947,2949],{"class":515,"line":622},[513,2935,596],{"class":595},[513,2937,600],{"class":599},[513,2939,2940],{"class":603}," createHttpLogDrain",[513,2942,607],{"class":599},[513,2944,610],{"class":595},[513,2946,613],{"class":599},[513,2948,2898],{"class":522},[513,2950,619],{"class":599},[513,2952,2953],{"class":515,"line":643},[513,2954,666],{"emptyLinePlaceholder":665},[513,2956,2957,2959,2961,2963,2965,2967],{"class":515,"line":662},[513,2958,728],{"class":727},[513,2960,2568],{"class":603},[513,2962,734],{"class":599},[513,2964,2940],{"class":672},[513,2966,676],{"class":603},[513,2968,679],{"class":599},[513,2970,2971,2973,2975,2977,2980,2982,2984,2987,2989],{"class":515,"line":669},[513,2972,2323],{"class":685},[513,2974,689],{"class":599},[513,2976,600],{"class":599},[513,2978,2979],{"class":685}," endpoint",[513,2981,689],{"class":599},[513,2983,613],{"class":599},[513,2985,2986],{"class":522},"\u002Fv1\u002Fingest",[513,2988,704],{"class":599},[513,2990,707],{"class":599},[513,2992,2993,2995],{"class":515,"line":682},[513,2994,713],{"class":599},[513,2996,716],{"class":603},[513,2998,2999,3001,3003,3005,3007,3009],{"class":515,"line":710},[513,3000,673],{"class":672},[513,3002,676],{"class":603},[513,3004,811],{"class":599},[513,3006,2568],{"class":603},[513,3008,713],{"class":599},[513,3010,716],{"class":603},[513,3012,3013],{"class":515,"line":719},[513,3014,666],{"emptyLinePlaceholder":665},[513,3016,3017,3019,3021,3023,3025,3027,3030,3032,3034,3037,3039,3041,3044,3046,3049,3051,3054,3056],{"class":515,"line":724},[513,3018,437],{"class":603},[513,3020,803],{"class":599},[513,3022,875],{"class":672},[513,3024,676],{"class":603},[513,3026,811],{"class":599},[513,3028,3029],{"class":685}," action",[513,3031,689],{"class":599},[513,3033,613],{"class":599},[513,3035,3036],{"class":522},"page_view",[513,3038,704],{"class":599},[513,3040,778],{"class":599},[513,3042,3043],{"class":685}," path",[513,3045,689],{"class":599},[513,3047,3048],{"class":603}," location",[513,3050,803],{"class":599},[513,3052,3053],{"class":603},"pathname ",[513,3055,713],{"class":599},[513,3057,716],{"class":603},[495,3059,3061],{"id":3060},"ingest-endpoint","Ingest endpoint",[427,3063,3064,3065,3068],{},"Add a POST route to receive batched ",[431,3066,3067],{},"DrainContext[]"," from the browser:",[503,3070,3072],{"className":585,"code":3071,"filename":587,"language":588,"meta":509,"style":509},"import type { DrainContext } from 'evlog'\n\napp.post('\u002Fv1\u002Fingest', async ({ body }) => {\n  const batch = body as DrainContext[]\n  for (const ctx of batch) {\n    console.log('[BROWSER]', JSON.stringify(ctx.event))\n  }\n  return new Response(null, { status: 204 })\n})\n",[431,3073,3074,3094,3098,3129,3148,3168,3206,3211,3239],{"__ignoreMap":509},[513,3075,3076,3078,3080,3082,3084,3086,3088,3090,3092],{"class":515,"line":516},[513,3077,596],{"class":595},[513,3079,2427],{"class":595},[513,3081,600],{"class":599},[513,3083,2432],{"class":603},[513,3085,607],{"class":599},[513,3087,610],{"class":595},[513,3089,613],{"class":599},[513,3091,638],{"class":522},[513,3093,619],{"class":599},[513,3095,3096],{"class":515,"line":622},[513,3097,666],{"emptyLinePlaceholder":665},[513,3099,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3123,3125,3127],{"class":515,"line":643},[513,3101,919],{"class":603},[513,3103,803],{"class":599},[513,3105,1634],{"class":672},[513,3107,676],{"class":603},[513,3109,704],{"class":599},[513,3111,2986],{"class":522},[513,3113,704],{"class":599},[513,3115,778],{"class":599},[513,3117,937],{"class":727},[513,3119,781],{"class":599},[513,3121,3122],{"class":784}," body",[513,3124,788],{"class":599},[513,3126,791],{"class":727},[513,3128,794],{"class":599},[513,3130,3131,3133,3136,3138,3140,3143,3145],{"class":515,"line":662},[513,3132,957],{"class":727},[513,3134,3135],{"class":603}," batch",[513,3137,963],{"class":599},[513,3139,3122],{"class":603},[513,3141,3142],{"class":595}," as",[513,3144,2432],{"class":519},[513,3146,3147],{"class":685},"[]\n",[513,3149,3150,3153,3155,3157,3159,3162,3164,3166],{"class":515,"line":669},[513,3151,3152],{"class":595},"  for",[513,3154,2342],{"class":685},[513,3156,728],{"class":727},[513,3158,2697],{"class":603},[513,3160,3161],{"class":599}," of",[513,3163,3135],{"class":603},[513,3165,1163],{"class":685},[513,3167,679],{"class":599},[513,3169,3170,3173,3175,3177,3179,3181,3184,3186,3188,3191,3193,3196,3198,3200,3202,3204],{"class":515,"line":682},[513,3171,3172],{"class":603},"    console",[513,3174,803],{"class":599},[513,3176,437],{"class":672},[513,3178,676],{"class":685},[513,3180,704],{"class":599},[513,3182,3183],{"class":522},"[BROWSER]",[513,3185,704],{"class":599},[513,3187,778],{"class":599},[513,3189,3190],{"class":603}," JSON",[513,3192,803],{"class":599},[513,3194,3195],{"class":672},"stringify",[513,3197,676],{"class":685},[513,3199,2345],{"class":603},[513,3201,803],{"class":599},[513,3203,2372],{"class":603},[513,3205,2404],{"class":685},[513,3207,3208],{"class":515,"line":710},[513,3209,3210],{"class":599},"  }\n",[513,3212,3213,3215,3217,3220,3222,3225,3227,3230,3232,3235,3237],{"class":515,"line":719},[513,3214,1178],{"class":595},[513,3216,737],{"class":599},[513,3218,3219],{"class":672}," Response",[513,3221,676],{"class":685},[513,3223,3224],{"class":599},"null,",[513,3226,600],{"class":599},[513,3228,3229],{"class":685}," status",[513,3231,689],{"class":599},[513,3233,3234],{"class":868}," 204",[513,3236,607],{"class":599},[513,3238,716],{"class":685},[513,3240,3241,3243],{"class":515,"line":724},[513,3242,713],{"class":599},[513,3244,716],{"class":603},[873,3246,3248,3249,3252],{"color":3247,"icon":395},"neutral","See the full ",[480,3250,3251],{"href":393},"HTTP drain"," adapter docs for batching, retry, sendBeacon fallback, and authentication options.",[491,3254,3256],{"id":3255},"run-locally","Run Locally",[503,3258,3261],{"className":505,"code":3259,"filename":3260,"language":508,"meta":509,"style":509},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\npnpm install\npnpm run example:elysia\n","Terminal",[431,3262,3263,3274,3282,3289],{"__ignoreMap":509},[513,3264,3265,3268,3271],{"class":515,"line":516},[513,3266,3267],{"class":519},"git",[513,3269,3270],{"class":522}," clone",[513,3272,3273],{"class":522}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[513,3275,3276,3279],{"class":515,"line":622},[513,3277,3278],{"class":672},"cd",[513,3280,3281],{"class":522}," evlog\n",[513,3283,3284,3286],{"class":515,"line":643},[513,3285,507],{"class":519},[513,3287,3288],{"class":522}," install\n",[513,3290,3291,3293,3296],{"class":515,"line":662},[513,3292,507],{"class":519},[513,3294,3295],{"class":522}," run",[513,3297,3298],{"class":522}," example:elysia\n",[427,3300,3301,3302,3306],{},"Open ",[480,3303,3304],{"href":3304,"rel":3305},"http:\u002F\u002Flocalhost:3000",[484]," to explore the interactive test UI.",[3308,3309,3310],"card-group",{},[3311,3312,3315],"card",{"icon":259,"title":3313,"to":3314},"Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Felysia","Browse the complete Elysia example source on GitHub.",[491,3317,3319],{"id":3318},"next-steps","Next Steps",[452,3321,3322,3327,3332,3337],{},[455,3323,3324,3326],{},[480,3325,51],{"href":52},": Design comprehensive events with context layering",[455,3328,3329,3331],{},[480,3330,319],{"href":324},": Send logs to Axiom, Sentry, PostHog, and more",[455,3333,3334,3336],{},[480,3335,175],{"href":176},": Control log volume with head and tail sampling",[455,3338,3339,3341,3342,1766,3344,1770,3346,3348],{},[480,3340,56],{"href":57},": Throw errors with ",[431,3343,1765],{},[431,3345,1769],{},[431,3347,1773],{}," fields",[3350,3351,3352],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":509,"searchDepth":622,"depth":622,"links":3354},[3355,3359,3360,3361,3363,3364,3365,3368,3369,3370,3374,3375],{"id":493,"depth":622,"text":20,"children":3356},[3357,3358],{"id":497,"depth":643,"text":498},{"id":581,"depth":643,"text":582},{"id":906,"depth":622,"text":51},{"id":1264,"depth":622,"text":441},{"id":1565,"depth":622,"text":3362},"Background work (log.fork)",{"id":1755,"depth":622,"text":1756},{"id":2219,"depth":622,"text":170},{"id":2232,"depth":622,"text":2233,"children":3366},[3367],{"id":2407,"depth":643,"text":2408},{"id":2620,"depth":622,"text":2621},{"id":2734,"depth":622,"text":2735},{"id":2892,"depth":622,"text":2893,"children":3371},[3372,3373],{"id":2902,"depth":643,"text":2903},{"id":3060,"depth":643,"text":3061},{"id":3255,"depth":622,"text":3256},{"id":3318,"depth":622,"text":3319},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Elysia applications.","md",[3379],{"label":3313,"icon":3380,"to":3314,"color":3247,"variant":3381},"i-simple-icons-github","subtle",{},{"title":256,"icon":259},{"title":256,"description":3376},"0FWLUMGYEGAk3Ns--ObfVcutbCbvIUwLVNyzRSLtT7U",[3387,3389],{"title":251,"path":252,"stem":253,"description":3388,"icon":254,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Fastify applications.",{"title":261,"path":262,"stem":263,"description":3390,"icon":264,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in React Router applications.",1778330172490]