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