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