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