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