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