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