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