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