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