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