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