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