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