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