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