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