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