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