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