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