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