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