[{"data":1,"prerenderedAt":3770},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-elysia":612,"-integrate-frameworks-elysia-surround":3765},[4,35,85,148,328,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,138,143],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"config","\u002Fcli\u002Fconfig","3.cli\u002F11.config","i-lucide-settings-2",{"title":109,"path":110,"stem":111,"icon":112},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":114,"path":115,"stem":116,"icon":117},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":119,"path":120,"stem":121,"icon":122},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":124,"path":125,"stem":126,"icon":127},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":129,"path":130,"stem":131,"icon":132},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":134,"path":135,"stem":136,"icon":137},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":139,"path":140,"stem":141,"icon":142},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":144,"path":145,"stem":146,"icon":147},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":149,"path":150,"stem":151,"children":152,"page":34},"Integrate","\u002Fintegrate","4.integrate",[153,157,240],{"title":41,"path":154,"stem":155,"icon":156},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":158,"path":159,"stem":160,"children":161,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[162,165,195,220],{"title":41,"path":163,"stem":164,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":166,"path":167,"stem":168,"children":169,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[170,175,180,185,190],{"title":171,"path":172,"stem":173,"icon":174},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":176,"path":177,"stem":178,"icon":179},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":181,"path":182,"stem":183,"icon":184},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":186,"path":187,"stem":188,"icon":189},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":191,"path":192,"stem":193,"icon":194},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":196,"path":197,"stem":198,"children":199,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[200,205,210,215],{"title":201,"path":202,"stem":203,"icon":204},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":206,"path":207,"stem":208,"icon":209},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":211,"path":212,"stem":213,"icon":214},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":216,"path":217,"stem":218,"icon":219},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":221,"path":222,"stem":223,"children":224,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[225,230,235],{"title":226,"path":227,"stem":228,"icon":229},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":231,"path":232,"stem":233,"icon":234},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":236,"path":237,"stem":238,"icon":239},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":241,"path":242,"stem":243,"children":244,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[245,249,254,259,264,269,274,279,284,289,294,299,304,309,313,318,323],{"title":41,"path":246,"stem":247,"icon":248},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":250,"path":251,"stem":252,"icon":253},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":255,"path":256,"stem":257,"icon":258},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":260,"path":261,"stem":262,"icon":263},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":265,"path":266,"stem":267,"icon":268},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":270,"path":271,"stem":272,"icon":273},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":275,"path":276,"stem":277,"icon":278},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":280,"path":281,"stem":282,"icon":283},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":285,"path":286,"stem":287,"icon":288},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":290,"path":291,"stem":292,"icon":293},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":295,"path":296,"stem":297,"icon":298},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":300,"path":301,"stem":302,"icon":303},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":305,"path":306,"stem":307,"icon":308},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":310,"path":311,"stem":312,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":314,"path":315,"stem":316,"icon":317},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":319,"path":320,"stem":321,"icon":322},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":324,"path":325,"stem":326,"icon":327},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":329,"path":330,"stem":331,"children":332,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[333,336,341,369,396,428,449,454,459,463],{"title":41,"path":334,"stem":335,"icon":117},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":337,"path":338,"stem":339,"icon":340},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":342,"icon":343,"path":344,"stem":345,"children":346,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[347,350,355,360,365],{"title":41,"path":348,"stem":349,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":351,"path":352,"stem":353,"icon":354},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":356,"path":357,"stem":358,"icon":359},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":361,"path":362,"stem":363,"icon":364},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":366,"path":367,"stem":368,"icon":147},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[375,378,383,388,392],{"title":41,"path":376,"stem":377,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":379,"path":380,"stem":381,"icon":382},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":384,"path":385,"stem":386,"icon":387},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":389,"path":390,"stem":391,"icon":340},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":393,"path":394,"stem":395,"icon":122},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":397,"icon":398,"path":399,"stem":400,"children":401,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[402,405,410,415,420,424],{"title":41,"path":403,"stem":404,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":406,"path":407,"stem":408,"icon":409},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":411,"path":412,"stem":413,"icon":414},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":416,"path":417,"stem":418,"icon":419},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":421,"path":422,"stem":423,"icon":398},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":425,"path":426,"stem":427,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":366,"icon":122,"path":429,"stem":430,"children":431,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[432,435,440,445],{"title":41,"path":433,"stem":434,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":436,"path":437,"stem":438,"icon":439},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":441,"path":442,"stem":443,"icon":444},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":446,"path":447,"stem":448,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":450,"path":451,"stem":452,"icon":453},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":455,"path":456,"stem":457,"icon":458},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":460,"path":461,"stem":462,"icon":444},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":464,"icon":465,"path":466,"stem":467,"children":468,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[469,472,477,482,485],{"title":41,"path":470,"stem":471,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":473,"path":474,"stem":475,"icon":476},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":478,"path":479,"stem":480,"icon":481},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":446,"path":483,"stem":484,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":425,"path":486,"stem":487,"icon":488},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","6.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":425,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":453},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":446,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","7.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":393,"path":562,"stem":563,"icon":122},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":398},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":453},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","8.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":214},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":613,"title":295,"body":614,"description":3755,"extension":3756,"links":3757,"meta":3761,"navigation":3762,"path":296,"seo":3763,"stem":297,"__hash__":3764},"docs\u002F4.integrate\u002Fframeworks\u002F10.elysia.md",{"type":615,"value":616,"toc":3730},"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,2438,2588,2607,2611,2614,2782,2786,2793,2984,2995,2999,3005,3109,3113,3124,3267,3271,3277,3281,3435,3439,3446,3622,3631,3635,3676,3684,3693,3697,3726],[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":298},"[\"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.).",[686,2423,2425],{"id":2424},"keep-the-options-in-evlogconfigts","Keep the options in evlog.config.ts",[618,2427,2428,2429,2434,2435,2437],{},"The options can live in an ",[671,2430,2431],{"href":105},[622,2432,2433],{},"evlog.config.ts"," at the root of the app, the file the CLI reads too. Import it where you call ",[622,2436,864],{}," and where you register the plugin:",[694,2439,2441],{"className":776,"code":2440,"filename":778,"language":779,"meta":700,"style":700},"import { Elysia } from 'elysia'\nimport { initLogger, toLoggerConfig, toMiddlewareOptions } from 'evlog'\nimport { evlog } from 'evlog\u002Felysia'\nimport config from '..\u002Fevlog.config'\n\ninitLogger(toLoggerConfig(config))\n\nconst app = new Elysia()\n  .use(evlog(toMiddlewareOptions(config)))\n  .listen(3000)\n",[622,2442,2443,2461,2489,2507,2524,2528,2540,2544,2558,2576],{"__ignoreMap":700},[704,2444,2445,2447,2449,2451,2453,2455,2457,2459],{"class":706,"line":707},[704,2446,787],{"class":786},[704,2448,791],{"class":790},[704,2450,795],{"class":794},[704,2452,798],{"class":790},[704,2454,801],{"class":786},[704,2456,804],{"class":790},[704,2458,807],{"class":713},[704,2460,810],{"class":790},[704,2462,2463,2465,2467,2469,2471,2474,2476,2479,2481,2483,2485,2487],{"class":706,"line":813},[704,2464,787],{"class":786},[704,2466,791],{"class":790},[704,2468,820],{"class":794},[704,2470,969],{"class":790},[704,2472,2473],{"class":794}," toLoggerConfig",[704,2475,969],{"class":790},[704,2477,2478],{"class":794}," toMiddlewareOptions",[704,2480,798],{"class":790},[704,2482,801],{"class":786},[704,2484,804],{"class":790},[704,2486,829],{"class":713},[704,2488,810],{"class":790},[704,2490,2491,2493,2495,2497,2499,2501,2503,2505],{"class":706,"line":834},[704,2492,787],{"class":786},[704,2494,791],{"class":790},[704,2496,717],{"class":794},[704,2498,798],{"class":790},[704,2500,801],{"class":786},[704,2502,804],{"class":790},[704,2504,624],{"class":713},[704,2506,810],{"class":790},[704,2508,2509,2511,2514,2517,2519,2522],{"class":706,"line":853},[704,2510,787],{"class":786},[704,2512,2513],{"class":794}," config ",[704,2515,2516],{"class":786},"from",[704,2518,804],{"class":790},[704,2520,2521],{"class":713},"..\u002Fevlog.config",[704,2523,810],{"class":790},[704,2525,2526],{"class":706,"line":860},[704,2527,857],{"emptyLinePlaceholder":856},[704,2529,2530,2532,2534,2537],{"class":706,"line":873},[704,2531,864],{"class":863},[704,2533,867],{"class":794},[704,2535,2536],{"class":863},"toLoggerConfig",[704,2538,2539],{"class":794},"(config))\n",[704,2541,2542],{"class":706,"line":901},[704,2543,857],{"emptyLinePlaceholder":856},[704,2545,2546,2548,2550,2552,2554,2556],{"class":706,"line":910},[704,2547,919],{"class":918},[704,2549,922],{"class":794},[704,2551,925],{"class":790},[704,2553,928],{"class":790},[704,2555,795],{"class":863},[704,2557,933],{"class":794},[704,2559,2560,2562,2564,2566,2568,2570,2573],{"class":706,"line":915},[704,2561,939],{"class":790},[704,2563,942],{"class":863},[704,2565,867],{"class":794},[704,2567,829],{"class":863},[704,2569,867],{"class":794},[704,2571,2572],{"class":863},"toMiddlewareOptions",[704,2574,2575],{"class":794},"(config)))\n",[704,2577,2578,2580,2582,2584,2586],{"class":706,"line":936},[704,2579,939],{"class":790},[704,2581,1054],{"class":863},[704,2583,867],{"class":794},[704,2585,1060],{"class":1059},[704,2587,907],{"class":794},[618,2589,2590,2592,2593,2595,2596,2598,2599,2602,2603,2606],{},[622,2591,2536],{}," keeps the options ",[622,2594,864],{}," takes and ",[622,2597,2572],{}," the ones ",[622,2600,2601],{},"evlog()"," takes, so the sampling, drain, ",[622,2604,2605],{},"enrich"," and route filters of the file all apply.",[682,2608,2610],{"id":2609},"drain-enrichers","Drain & Enrichers",[618,2612,2613],{},"Configure drain adapters and enrichers directly in the plugin options:",[694,2615,2617],{"className":776,"code":2616,"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,2618,2619,2639,2659,2663,2676,2680,2696,2710,2729,2740,2770,2775],{"__ignoreMap":700},[704,2620,2621,2623,2625,2628,2630,2632,2634,2637],{"class":706,"line":707},[704,2622,787],{"class":786},[704,2624,791],{"class":790},[704,2626,2627],{"class":794}," createAxiomDrain",[704,2629,798],{"class":790},[704,2631,801],{"class":786},[704,2633,804],{"class":790},[704,2635,2636],{"class":713},"evlog\u002Faxiom",[704,2638,810],{"class":790},[704,2640,2641,2643,2645,2648,2650,2652,2654,2657],{"class":706,"line":813},[704,2642,787],{"class":786},[704,2644,791],{"class":790},[704,2646,2647],{"class":794}," createUserAgentEnricher",[704,2649,798],{"class":790},[704,2651,801],{"class":786},[704,2653,804],{"class":790},[704,2655,2656],{"class":713},"evlog\u002Fenrichers",[704,2658,810],{"class":790},[704,2660,2661],{"class":706,"line":834},[704,2662,857],{"emptyLinePlaceholder":856},[704,2664,2665,2667,2670,2672,2674],{"class":706,"line":853},[704,2666,919],{"class":918},[704,2668,2669],{"class":794}," userAgent ",[704,2671,925],{"class":790},[704,2673,2647],{"class":863},[704,2675,933],{"class":794},[704,2677,2678],{"class":706,"line":860},[704,2679,857],{"emptyLinePlaceholder":856},[704,2681,2682,2684,2686,2688,2690,2692,2694],{"class":706,"line":873},[704,2683,1110],{"class":794},[704,2685,994],{"class":790},[704,2687,942],{"class":863},[704,2689,867],{"class":794},[704,2691,829],{"class":863},[704,2693,867],{"class":794},[704,2695,870],{"class":790},[704,2697,2698,2701,2703,2705,2708],{"class":706,"line":901},[704,2699,2700],{"class":876},"  drain",[704,2702,880],{"class":790},[704,2704,2627],{"class":863},[704,2706,2707],{"class":794},"()",[704,2709,2120],{"class":790},[704,2711,2712,2715,2717,2720,2723,2725,2727],{"class":706,"line":910},[704,2713,2714],{"class":863},"  enrich",[704,2716,880],{"class":790},[704,2718,2719],{"class":790}," (",[704,2721,2722],{"class":975},"ctx",[704,2724,1516],{"class":790},[704,2726,982],{"class":918},[704,2728,985],{"class":790},[704,2730,2731,2734,2736,2738],{"class":706,"line":915},[704,2732,2733],{"class":863},"    userAgent",[704,2735,867],{"class":876},[704,2737,2722],{"class":794},[704,2739,907],{"class":876},[704,2741,2742,2745,2747,2750,2752,2755,2757,2760,2762,2765,2767],{"class":706,"line":936},[704,2743,2744],{"class":794},"    ctx",[704,2746,994],{"class":790},[704,2748,2749],{"class":794},"event",[704,2751,994],{"class":790},[704,2753,2754],{"class":794},"region",[704,2756,1154],{"class":790},[704,2758,2759],{"class":794}," process",[704,2761,994],{"class":790},[704,2763,2764],{"class":794},"env",[704,2766,994],{"class":790},[704,2768,2769],{"class":794},"FLY_REGION\n",[704,2771,2772],{"class":706,"line":952},[704,2773,2774],{"class":790},"  },\n",[704,2776,2777,2779],{"class":706,"line":988},[704,2778,904],{"class":790},[704,2780,2781],{"class":794},"))\n",[686,2783,2785],{"id":2784},"pipeline-batching-retry","Pipeline (Batching & Retry)",[618,2787,2788,2789,2792],{},"For production, wrap your adapter with ",[622,2790,2791],{},"createDrainPipeline"," to batch events and retry on failure:",[694,2794,2796],{"className":776,"code":2795,"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,2797,2798,2820,2838,2858,2862,2886,2915,2933,2939,2958,2962],{"__ignoreMap":700},[704,2799,2800,2802,2805,2807,2810,2812,2814,2816,2818],{"class":706,"line":707},[704,2801,787],{"class":786},[704,2803,2804],{"class":786}," type",[704,2806,791],{"class":790},[704,2808,2809],{"class":794}," DrainContext",[704,2811,798],{"class":790},[704,2813,801],{"class":786},[704,2815,804],{"class":790},[704,2817,829],{"class":713},[704,2819,810],{"class":790},[704,2821,2822,2824,2826,2828,2830,2832,2834,2836],{"class":706,"line":813},[704,2823,787],{"class":786},[704,2825,791],{"class":790},[704,2827,2627],{"class":794},[704,2829,798],{"class":790},[704,2831,801],{"class":786},[704,2833,804],{"class":790},[704,2835,2636],{"class":713},[704,2837,810],{"class":790},[704,2839,2840,2842,2844,2847,2849,2851,2853,2856],{"class":706,"line":834},[704,2841,787],{"class":786},[704,2843,791],{"class":790},[704,2845,2846],{"class":794}," createDrainPipeline",[704,2848,798],{"class":790},[704,2850,801],{"class":786},[704,2852,804],{"class":790},[704,2854,2855],{"class":713},"evlog\u002Fpipeline",[704,2857,810],{"class":790},[704,2859,2860],{"class":706,"line":853},[704,2861,857],{"emptyLinePlaceholder":856},[704,2863,2864,2866,2869,2871,2873,2876,2879,2882,2884],{"class":706,"line":860},[704,2865,919],{"class":918},[704,2867,2868],{"class":794}," pipeline ",[704,2870,925],{"class":790},[704,2872,2846],{"class":863},[704,2874,2875],{"class":790},"\u003C",[704,2877,2878],{"class":710},"DrainContext",[704,2880,2881],{"class":790},">",[704,2883,867],{"class":794},[704,2885,870],{"class":790},[704,2887,2888,2891,2893,2895,2898,2900,2903,2905,2908,2910,2913],{"class":706,"line":873},[704,2889,2890],{"class":876},"  batch",[704,2892,880],{"class":790},[704,2894,791],{"class":790},[704,2896,2897],{"class":876}," size",[704,2899,880],{"class":790},[704,2901,2902],{"class":1059}," 50",[704,2904,969],{"class":790},[704,2906,2907],{"class":876}," intervalMs",[704,2909,880],{"class":790},[704,2911,2912],{"class":1059}," 5000",[704,2914,898],{"class":790},[704,2916,2917,2920,2922,2924,2927,2929,2931],{"class":706,"line":901},[704,2918,2919],{"class":876},"  retry",[704,2921,880],{"class":790},[704,2923,791],{"class":790},[704,2925,2926],{"class":876}," maxAttempts",[704,2928,880],{"class":790},[704,2930,2072],{"class":1059},[704,2932,898],{"class":790},[704,2934,2935,2937],{"class":706,"line":910},[704,2936,904],{"class":790},[704,2938,907],{"class":794},[704,2940,2941,2943,2946,2948,2951,2953,2956],{"class":706,"line":915},[704,2942,919],{"class":918},[704,2944,2945],{"class":794}," drain ",[704,2947,925],{"class":790},[704,2949,2950],{"class":863}," pipeline",[704,2952,867],{"class":794},[704,2954,2955],{"class":863},"createAxiomDrain",[704,2957,949],{"class":794},[704,2959,2960],{"class":706,"line":936},[704,2961,857],{"emptyLinePlaceholder":856},[704,2963,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982],{"class":706,"line":952},[704,2965,1110],{"class":794},[704,2967,994],{"class":790},[704,2969,942],{"class":863},[704,2971,867],{"class":794},[704,2973,829],{"class":863},[704,2975,867],{"class":794},[704,2977,1002],{"class":790},[704,2979,2945],{"class":794},[704,2981,904],{"class":790},[704,2983,2781],{"class":794},[1064,2985,2986,2987,2990,2991,2994],{"color":1066,"icon":13},"Call ",[622,2988,2989],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[671,2992,2993],{"href":545},"Pipeline docs"," for all options.",[682,2996,2998],{"id":2997},"tail-sampling","Tail Sampling",[618,3000,1458,3001,3004],{},[622,3002,3003],{},"keep"," to force-retain specific events regardless of head sampling:",[694,3006,3008],{"className":776,"code":3007,"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,3009,3010,3026,3038,3055,3099,3103],{"__ignoreMap":700},[704,3011,3012,3014,3016,3018,3020,3022,3024],{"class":706,"line":707},[704,3013,1110],{"class":794},[704,3015,994],{"class":790},[704,3017,942],{"class":863},[704,3019,867],{"class":794},[704,3021,829],{"class":863},[704,3023,867],{"class":794},[704,3025,870],{"class":790},[704,3027,3028,3030,3032,3034,3036],{"class":706,"line":813},[704,3029,2700],{"class":876},[704,3031,880],{"class":790},[704,3033,2627],{"class":863},[704,3035,2707],{"class":794},[704,3037,2120],{"class":790},[704,3039,3040,3043,3045,3047,3049,3051,3053],{"class":706,"line":834},[704,3041,3042],{"class":863},"  keep",[704,3044,880],{"class":790},[704,3046,2719],{"class":790},[704,3048,2722],{"class":975},[704,3050,1516],{"class":790},[704,3052,982],{"class":918},[704,3054,985],{"class":790},[704,3056,3057,3060,3062,3064,3066,3069,3072,3075,3077,3079,3082,3085,3087,3089,3091,3094,3096],{"class":706,"line":853},[704,3058,3059],{"class":786},"    if",[704,3061,2719],{"class":876},[704,3063,2722],{"class":794},[704,3065,994],{"class":790},[704,3067,3068],{"class":794},"duration",[704,3070,3071],{"class":790}," &&",[704,3073,3074],{"class":794}," ctx",[704,3076,994],{"class":790},[704,3078,3068],{"class":794},[704,3080,3081],{"class":790}," >",[704,3083,3084],{"class":1059}," 2000",[704,3086,1354],{"class":876},[704,3088,2722],{"class":794},[704,3090,994],{"class":790},[704,3092,3093],{"class":794},"shouldKeep",[704,3095,1154],{"class":790},[704,3097,3098],{"class":1034}," true\n",[704,3100,3101],{"class":706,"line":860},[704,3102,2774],{"class":790},[704,3104,3105,3107],{"class":706,"line":873},[704,3106,904],{"class":790},[704,3108,2781],{"class":794},[682,3110,3112],{"id":3111},"route-filtering","Route Filtering",[618,3114,3115,3116,3119,3120,3123],{},"Control which routes are logged with ",[622,3117,3118],{},"include"," and ",[622,3121,3122],{},"exclude"," patterns:",[694,3125,3127],{"className":776,"code":3126,"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,3128,3129,3145,3167,3195,3204,3231,3257,3261],{"__ignoreMap":700},[704,3130,3131,3133,3135,3137,3139,3141,3143],{"class":706,"line":707},[704,3132,1110],{"class":794},[704,3134,994],{"class":790},[704,3136,942],{"class":863},[704,3138,867],{"class":794},[704,3140,829],{"class":863},[704,3142,867],{"class":794},[704,3144,870],{"class":790},[704,3146,3147,3150,3152,3155,3157,3160,3162,3165],{"class":706,"line":813},[704,3148,3149],{"class":876},"  include",[704,3151,880],{"class":790},[704,3153,3154],{"class":794}," [",[704,3156,895],{"class":790},[704,3158,3159],{"class":713},"\u002Fapi\u002F**",[704,3161,895],{"class":790},[704,3163,3164],{"class":794},"]",[704,3166,2120],{"class":790},[704,3168,3169,3172,3174,3176,3178,3181,3183,3185,3187,3189,3191,3193],{"class":706,"line":834},[704,3170,3171],{"class":876},"  exclude",[704,3173,880],{"class":790},[704,3175,3154],{"class":794},[704,3177,895],{"class":790},[704,3179,3180],{"class":713},"\u002F_internal\u002F**",[704,3182,895],{"class":790},[704,3184,969],{"class":790},[704,3186,804],{"class":790},[704,3188,964],{"class":713},[704,3190,895],{"class":790},[704,3192,3164],{"class":794},[704,3194,2120],{"class":790},[704,3196,3197,3200,3202],{"class":706,"line":853},[704,3198,3199],{"class":876},"  routes",[704,3201,880],{"class":790},[704,3203,985],{"class":790},[704,3205,3206,3209,3212,3214,3216,3218,3220,3222,3224,3227,3229],{"class":706,"line":860},[704,3207,3208],{"class":790},"    '",[704,3210,3211],{"class":876},"\u002Fapi\u002Fauth\u002F**",[704,3213,895],{"class":790},[704,3215,880],{"class":790},[704,3217,791],{"class":790},[704,3219,885],{"class":876},[704,3221,880],{"class":790},[704,3223,804],{"class":790},[704,3225,3226],{"class":713},"auth-service",[704,3228,895],{"class":790},[704,3230,898],{"class":790},[704,3232,3233,3235,3238,3240,3242,3244,3246,3248,3250,3253,3255],{"class":706,"line":873},[704,3234,3208],{"class":790},[704,3236,3237],{"class":876},"\u002Fapi\u002Fpayment\u002F**",[704,3239,895],{"class":790},[704,3241,880],{"class":790},[704,3243,791],{"class":790},[704,3245,885],{"class":876},[704,3247,880],{"class":790},[704,3249,804],{"class":790},[704,3251,3252],{"class":713},"payment-service",[704,3254,895],{"class":790},[704,3256,898],{"class":790},[704,3258,3259],{"class":706,"line":901},[704,3260,2774],{"class":790},[704,3262,3263,3265],{"class":706,"line":910},[704,3264,904],{"class":790},[704,3266,2781],{"class":794},[682,3268,3270],{"id":3269},"client-side-logging","Client-Side Logging",[618,3272,1458,3273,3276],{},[622,3274,3275],{},"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,3278,3280],{"id":3279},"browser-setup","Browser setup",[694,3282,3285],{"className":776,"code":3283,"filename":3284,"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,3286,3287,3309,3328,3332,3346,3368,3374,3388,3392],{"__ignoreMap":700},[704,3288,3289,3291,3293,3295,3297,3299,3301,3303,3305,3307],{"class":706,"line":707},[704,3290,787],{"class":786},[704,3292,791],{"class":790},[704,3294,820],{"class":794},[704,3296,969],{"class":790},[704,3298,976],{"class":794},[704,3300,798],{"class":790},[704,3302,801],{"class":786},[704,3304,804],{"class":790},[704,3306,829],{"class":713},[704,3308,810],{"class":790},[704,3310,3311,3313,3315,3318,3320,3322,3324,3326],{"class":706,"line":813},[704,3312,787],{"class":786},[704,3314,791],{"class":790},[704,3316,3317],{"class":794}," createHttpLogDrain",[704,3319,798],{"class":790},[704,3321,801],{"class":786},[704,3323,804],{"class":790},[704,3325,3275],{"class":713},[704,3327,810],{"class":790},[704,3329,3330],{"class":706,"line":834},[704,3331,857],{"emptyLinePlaceholder":856},[704,3333,3334,3336,3338,3340,3342,3344],{"class":706,"line":853},[704,3335,919],{"class":918},[704,3337,2945],{"class":794},[704,3339,925],{"class":790},[704,3341,3317],{"class":863},[704,3343,867],{"class":794},[704,3345,870],{"class":790},[704,3347,3348,3350,3352,3354,3357,3359,3361,3364,3366],{"class":706,"line":860},[704,3349,2700],{"class":876},[704,3351,880],{"class":790},[704,3353,791],{"class":790},[704,3355,3356],{"class":876}," endpoint",[704,3358,880],{"class":790},[704,3360,804],{"class":790},[704,3362,3363],{"class":713},"\u002Fv1\u002Fingest",[704,3365,895],{"class":790},[704,3367,898],{"class":790},[704,3369,3370,3372],{"class":706,"line":873},[704,3371,904],{"class":790},[704,3373,907],{"class":794},[704,3375,3376,3378,3380,3382,3384,3386],{"class":706,"line":901},[704,3377,864],{"class":863},[704,3379,867],{"class":794},[704,3381,1002],{"class":790},[704,3383,2945],{"class":794},[704,3385,904],{"class":790},[704,3387,907],{"class":794},[704,3389,3390],{"class":706,"line":910},[704,3391,857],{"emptyLinePlaceholder":856},[704,3393,3394,3396,3398,3400,3402,3404,3407,3409,3411,3414,3416,3418,3421,3423,3426,3428,3431,3433],{"class":706,"line":915},[704,3395,628],{"class":794},[704,3397,994],{"class":790},[704,3399,1066],{"class":863},[704,3401,867],{"class":794},[704,3403,1002],{"class":790},[704,3405,3406],{"class":876}," action",[704,3408,880],{"class":790},[704,3410,804],{"class":790},[704,3412,3413],{"class":713},"page_view",[704,3415,895],{"class":790},[704,3417,969],{"class":790},[704,3419,3420],{"class":876}," path",[704,3422,880],{"class":790},[704,3424,3425],{"class":794}," location",[704,3427,994],{"class":790},[704,3429,3430],{"class":794},"pathname ",[704,3432,904],{"class":790},[704,3434,907],{"class":794},[686,3436,3438],{"id":3437},"ingest-endpoint","Ingest endpoint",[618,3440,3441,3442,3445],{},"Add a POST route to receive batched ",[622,3443,3444],{},"DrainContext[]"," from the browser:",[694,3447,3449],{"className":776,"code":3448,"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,3450,3451,3471,3475,3506,3525,3545,3583,3588,3616],{"__ignoreMap":700},[704,3452,3453,3455,3457,3459,3461,3463,3465,3467,3469],{"class":706,"line":707},[704,3454,787],{"class":786},[704,3456,2804],{"class":786},[704,3458,791],{"class":790},[704,3460,2809],{"class":794},[704,3462,798],{"class":790},[704,3464,801],{"class":786},[704,3466,804],{"class":790},[704,3468,829],{"class":713},[704,3470,810],{"class":790},[704,3472,3473],{"class":706,"line":813},[704,3474,857],{"emptyLinePlaceholder":856},[704,3476,3477,3479,3481,3483,3485,3487,3489,3491,3493,3495,3497,3500,3502,3504],{"class":706,"line":834},[704,3478,1110],{"class":794},[704,3480,994],{"class":790},[704,3482,1826],{"class":863},[704,3484,867],{"class":794},[704,3486,895],{"class":790},[704,3488,3363],{"class":713},[704,3490,895],{"class":790},[704,3492,969],{"class":790},[704,3494,1128],{"class":918},[704,3496,972],{"class":790},[704,3498,3499],{"class":975}," body",[704,3501,979],{"class":790},[704,3503,982],{"class":918},[704,3505,985],{"class":790},[704,3507,3508,3510,3513,3515,3517,3520,3522],{"class":706,"line":853},[704,3509,1148],{"class":918},[704,3511,3512],{"class":794}," batch",[704,3514,1154],{"class":790},[704,3516,3499],{"class":794},[704,3518,3519],{"class":786}," as",[704,3521,2809],{"class":710},[704,3523,3524],{"class":876},"[]\n",[704,3526,3527,3530,3532,3534,3536,3539,3541,3543],{"class":706,"line":860},[704,3528,3529],{"class":786},"  for",[704,3531,2719],{"class":876},[704,3533,919],{"class":918},[704,3535,3074],{"class":794},[704,3537,3538],{"class":790}," of",[704,3540,3512],{"class":794},[704,3542,1354],{"class":876},[704,3544,870],{"class":790},[704,3546,3547,3550,3552,3554,3556,3558,3561,3563,3565,3568,3570,3573,3575,3577,3579,3581],{"class":706,"line":873},[704,3548,3549],{"class":794},"    console",[704,3551,994],{"class":790},[704,3553,628],{"class":863},[704,3555,867],{"class":876},[704,3557,895],{"class":790},[704,3559,3560],{"class":713},"[BROWSER]",[704,3562,895],{"class":790},[704,3564,969],{"class":790},[704,3566,3567],{"class":794}," JSON",[704,3569,994],{"class":790},[704,3571,3572],{"class":863},"stringify",[704,3574,867],{"class":876},[704,3576,2722],{"class":794},[704,3578,994],{"class":790},[704,3580,2749],{"class":794},[704,3582,2781],{"class":876},[704,3584,3585],{"class":706,"line":901},[704,3586,3587],{"class":790},"  }\n",[704,3589,3590,3592,3594,3597,3599,3602,3604,3607,3609,3612,3614],{"class":706,"line":910},[704,3591,1369],{"class":786},[704,3593,928],{"class":790},[704,3595,3596],{"class":863}," Response",[704,3598,867],{"class":876},[704,3600,3601],{"class":790},"null,",[704,3603,791],{"class":790},[704,3605,3606],{"class":876}," status",[704,3608,880],{"class":790},[704,3610,3611],{"class":1059}," 204",[704,3613,798],{"class":790},[704,3615,907],{"class":876},[704,3617,3618,3620],{"class":706,"line":915},[704,3619,904],{"class":790},[704,3621,907],{"class":794},[1064,3623,3626,3627,3630],{"color":3624,"icon":3625},"neutral","i-lucide-globe","See the full ",[671,3628,3629],{"href":545},"HTTP drain"," adapter docs for batching, retry, sendBeacon fallback, and authentication options.",[682,3632,3634],{"id":3633},"run-locally","Run Locally",[694,3636,3639],{"className":696,"code":3637,"filename":3638,"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,3640,3641,3652,3660,3667],{"__ignoreMap":700},[704,3642,3643,3646,3649],{"class":706,"line":707},[704,3644,3645],{"class":710},"git",[704,3647,3648],{"class":713}," clone",[704,3650,3651],{"class":713}," https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog.git\n",[704,3653,3654,3657],{"class":706,"line":813},[704,3655,3656],{"class":863},"cd",[704,3658,3659],{"class":713}," evlog\n",[704,3661,3662,3664],{"class":706,"line":834},[704,3663,698],{"class":710},[704,3665,3666],{"class":713}," install\n",[704,3668,3669,3671,3674],{"class":706,"line":853},[704,3670,698],{"class":710},[704,3672,3673],{"class":713}," example",[704,3675,720],{"class":713},[618,3677,3678,3679,3683],{},"Open ",[671,3680,3681],{"href":3681,"rel":3682},"http:\u002F\u002Flocalhost:3000",[675]," to explore the interactive test UI.",[3685,3686,3687],"card-group",{},[3688,3689,3692],"card",{"icon":298,"title":3690,"to":3691},"Source Code","https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Felysia","Browse the complete Elysia example source on GitHub.",[682,3694,3696],{"id":3695},"next-steps","Next Steps",[643,3698,3699,3704,3709,3714],{},[646,3700,3701,3703],{},[671,3702,51],{"href":52},": Design comprehensive events with context layering",[646,3705,3706,3708],{},[671,3707,158],{"href":163},": Send logs to Axiom, Sentry, PostHog, and more",[646,3710,3711,3713],{},[671,3712,66],{"href":67},": Control log volume with head and tail sampling",[646,3715,3716,3718,3719,1958,3721,1962,3723,3725],{},[671,3717,56],{"href":57},": Throw errors with ",[622,3720,1957],{},[622,3722,1961],{},[622,3724,1965],{}," fields",[3727,3728,3729],"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":3731},[3732,3736,3737,3738,3740,3741,3744,3747,3748,3749,3753,3754],{"id":684,"depth":813,"text":25,"children":3733},[3734,3735],{"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":3739},"Background work (log.fork)",{"id":1947,"depth":813,"text":1948},{"id":2411,"depth":813,"text":557,"children":3742},[3743],{"id":2424,"depth":834,"text":2425},{"id":2609,"depth":813,"text":2610,"children":3745},[3746],{"id":2784,"depth":834,"text":2785},{"id":2997,"depth":813,"text":2998},{"id":3111,"depth":813,"text":3112},{"id":3269,"depth":813,"text":3270,"children":3750},[3751,3752],{"id":3279,"depth":834,"text":3280},{"id":3437,"depth":834,"text":3438},{"id":3633,"depth":813,"text":3634},{"id":3695,"depth":813,"text":3696},"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",[3758],{"label":3690,"icon":3759,"to":3691,"color":3624,"variant":3760},"i-simple-icons-github","subtle",{},{"title":295,"icon":298},{"title":295,"description":3755},"4c6mXmoO7_kuE5CAKwA9eomFlJyK0hlOsD4jSIX0a9s",[3766,3768],{"title":290,"path":291,"stem":292,"description":3767,"icon":293,"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":300,"path":301,"stem":302,"description":3769,"icon":303,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in React Router applications.",1791657864605]