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