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