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