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