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