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