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