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