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