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