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