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