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