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