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