[{"data":1,"prerenderedAt":3294},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-nestjs":243,"-frameworks-nestjs-surround":3289},[4,30,110,159,213,229],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"icon":109},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F14.custom-integration","i-lucide-puzzle",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[115,120,125,130,135,139,144,149,154],{"title":116,"path":117,"stem":118,"icon":119},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":121,"path":122,"stem":123,"icon":124},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":131,"path":132,"stem":133,"icon":134},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":136,"path":137,"stem":138,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":140,"path":141,"stem":142,"icon":143},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":145,"path":146,"stem":147,"icon":148},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":150,"path":151,"stem":152,"icon":153},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":155,"path":156,"stem":157,"icon":158},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F8.performance","i-lucide-gauge",{"title":160,"path":161,"stem":162,"children":163,"page":29},"Adapters","\u002Fadapters","4.adapters",[164,168,173,178,183,188,193,198,203,208],{"title":36,"path":165,"stem":166,"icon":167},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":169,"path":170,"stem":171,"icon":172},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F10.browser","i-lucide-globe",{"title":174,"path":175,"stem":176,"icon":177},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":179,"path":180,"stem":181,"icon":182},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":184,"path":185,"stem":186,"icon":187},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":189,"path":190,"stem":191,"icon":192},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":194,"path":195,"stem":196,"icon":197},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":199,"path":200,"stem":201,"icon":202},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":204,"path":205,"stem":206,"icon":207},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F8.custom","i-lucide-code",{"title":209,"path":210,"stem":211,"icon":212},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F9.pipeline","i-lucide-workflow",{"title":214,"path":215,"stem":216,"children":217,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[218,221,225],{"title":36,"path":219,"stem":220,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":222,"path":223,"stem":224,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":226,"path":227,"stem":228,"icon":207},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":230,"path":231,"stem":232,"children":233,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[234,238],{"title":36,"path":235,"stem":236,"icon":237},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":244,"title":66,"body":245,"description":3279,"extension":3280,"links":3281,"meta":3285,"navigation":3286,"path":67,"seo":3287,"stem":68,"__hash__":3288},"docs\u002F2.frameworks\u002F06.nestjs.md",{"type":246,"value":247,"toc":3261},"minimark",[248,269,350,354,359,388,392,526,530,699,704,707,710,1106,1109,1173,1176,1182,1369,1473,1489,1493,1511,1887,1890,2124,2127,2174,2177,2188,2192,2197,2438,2442,2452,2714,2718,2725,2913,2926,2930,2936,3039,3043,3053,3193,3197,3238,3247,3257],[249,250,251,252,256,257,260,261,264,265,268],"p",{},"The ",[253,254,255],"code",{},"evlog\u002Fnestjs"," module provides ",[253,258,259],{},"EvlogModule.forRoot()"," which registers a global middleware, creating a request-scoped logger accessible via ",[253,262,263],{},"useLogger()"," or ",[253,266,267],{},"req.log",", emitting a wide event when the response completes.",[270,271,272],"code-collapse",{},[273,274,280],"pre",{"className":275,"code":276,"filename":277,"language":278,"meta":279,"style":279},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Set up evlog in my NestJS app.\n\n- Install evlog: pnpm add evlog\n- Import EvlogModule from 'evlog\u002Fnestjs' and add EvlogModule.forRoot() to AppModule imports\n- The global middleware auto-creates a request-scoped logger for every request\n- Use useLogger() in any controller or service to access the logger\n- Use log.set() to accumulate context, throw createError() for structured errors\n- Optionally pass drain, enrich, and keep callbacks to forRoot()\n\nDocs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fnestjs\nAdapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n","Prompt","txt","",[253,281,282,290,297,303,309,315,321,327,333,338,344],{"__ignoreMap":279},[283,284,287],"span",{"class":285,"line":286},"line",1,[283,288,289],{},"Set up evlog in my NestJS app.\n",[283,291,293],{"class":285,"line":292},2,[283,294,296],{"emptyLinePlaceholder":295},true,"\n",[283,298,300],{"class":285,"line":299},3,[283,301,302],{},"- Install evlog: pnpm add evlog\n",[283,304,306],{"class":285,"line":305},4,[283,307,308],{},"- Import EvlogModule from 'evlog\u002Fnestjs' and add EvlogModule.forRoot() to AppModule imports\n",[283,310,312],{"class":285,"line":311},5,[283,313,314],{},"- The global middleware auto-creates a request-scoped logger for every request\n",[283,316,318],{"class":285,"line":317},6,[283,319,320],{},"- Use useLogger() in any controller or service to access the logger\n",[283,322,324],{"class":285,"line":323},7,[283,325,326],{},"- Use log.set() to accumulate context, throw createError() for structured errors\n",[283,328,330],{"class":285,"line":329},8,[283,331,332],{},"- Optionally pass drain, enrich, and keep callbacks to forRoot()\n",[283,334,336],{"class":285,"line":335},9,[283,337,296],{"emptyLinePlaceholder":295},[283,339,341],{"class":285,"line":340},10,[283,342,343],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fnestjs\n",[283,345,347],{"class":285,"line":346},11,[283,348,349],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n",[351,352,20],"h2",{"id":353},"quick-start",[355,356,358],"h3",{"id":357},"_1-install","1. Install",[273,360,364],{"className":361,"code":362,"language":363,"meta":279,"style":279},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog @nestjs\u002Fcommon @nestjs\u002Fcore @nestjs\u002Fplatform-express\n","bash",[253,365,366],{"__ignoreMap":279},[283,367,368,372,376,379,382,385],{"class":285,"line":286},[283,369,371],{"class":370},"sBMFI","bun",[283,373,375],{"class":374},"sfazB"," add",[283,377,378],{"class":374}," evlog",[283,380,381],{"class":374}," @nestjs\u002Fcommon",[283,383,384],{"class":374}," @nestjs\u002Fcore",[283,386,387],{"class":374}," @nestjs\u002Fplatform-express\n",[355,389,391],{"id":390},"_2-register-the-module","2. Register the module",[273,393,398],{"className":394,"code":395,"filename":396,"language":397,"meta":279,"style":279},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Module } from '@nestjs\u002Fcommon'\nimport { EvlogModule } from 'evlog\u002Fnestjs'\n\n@Module({\n  imports: [\n    EvlogModule.forRoot(),\n  ],\n})\nexport class AppModule {}\n","src\u002Fapp.module.ts","typescript",[253,399,400,429,448,452,467,479,496,503,511],{"__ignoreMap":279},[283,401,402,406,410,414,417,420,423,426],{"class":285,"line":286},[283,403,405],{"class":404},"s7zQu","import",[283,407,409],{"class":408},"sMK4o"," {",[283,411,413],{"class":412},"sTEyZ"," Module",[283,415,416],{"class":408}," }",[283,418,419],{"class":404}," from",[283,421,422],{"class":408}," '",[283,424,425],{"class":374},"@nestjs\u002Fcommon",[283,427,428],{"class":408},"'\n",[283,430,431,433,435,438,440,442,444,446],{"class":285,"line":292},[283,432,405],{"class":404},[283,434,409],{"class":408},[283,436,437],{"class":412}," EvlogModule",[283,439,416],{"class":408},[283,441,419],{"class":404},[283,443,422],{"class":408},[283,445,255],{"class":374},[283,447,428],{"class":408},[283,449,450],{"class":285,"line":299},[283,451,296],{"emptyLinePlaceholder":295},[283,453,454,457,461,464],{"class":285,"line":305},[283,455,456],{"class":408},"@",[283,458,460],{"class":459},"s2Zo4","Module",[283,462,463],{"class":412},"(",[283,465,466],{"class":408},"{\n",[283,468,469,473,476],{"class":285,"line":311},[283,470,472],{"class":471},"swJcz","  imports",[283,474,475],{"class":408},":",[283,477,478],{"class":412}," [\n",[283,480,481,484,487,490,493],{"class":285,"line":317},[283,482,483],{"class":412},"    EvlogModule",[283,485,486],{"class":408},".",[283,488,489],{"class":459},"forRoot",[283,491,492],{"class":412},"()",[283,494,495],{"class":408},",\n",[283,497,498,501],{"class":285,"line":323},[283,499,500],{"class":412},"  ]",[283,502,495],{"class":408},[283,504,505,508],{"class":285,"line":329},[283,506,507],{"class":408},"}",[283,509,510],{"class":412},")\n",[283,512,513,516,520,523],{"class":285,"line":335},[283,514,515],{"class":404},"export",[283,517,519],{"class":518},"spNyl"," class",[283,521,522],{"class":370}," AppModule",[283,524,525],{"class":408}," {}\n",[355,527,529],{"id":528},"_3-bootstrap-with-evlog","3. Bootstrap with evlog",[273,531,534],{"className":394,"code":532,"filename":533,"language":397,"meta":279,"style":279},"import 'reflect-metadata'\nimport { NestFactory } from '@nestjs\u002Fcore'\nimport { initLogger } from 'evlog'\nimport { AppModule } from '.\u002Fapp.module'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nconst app = await NestFactory.create(AppModule)\nawait app.listen(3000)\n","src\u002Fmain.ts",[253,535,536,547,567,587,606,610,619,644,650,654,678],{"__ignoreMap":279},[283,537,538,540,542,545],{"class":285,"line":286},[283,539,405],{"class":404},[283,541,422],{"class":408},[283,543,544],{"class":374},"reflect-metadata",[283,546,428],{"class":408},[283,548,549,551,553,556,558,560,562,565],{"class":285,"line":292},[283,550,405],{"class":404},[283,552,409],{"class":408},[283,554,555],{"class":412}," NestFactory",[283,557,416],{"class":408},[283,559,419],{"class":404},[283,561,422],{"class":408},[283,563,564],{"class":374},"@nestjs\u002Fcore",[283,566,428],{"class":408},[283,568,569,571,573,576,578,580,582,585],{"class":285,"line":299},[283,570,405],{"class":404},[283,572,409],{"class":408},[283,574,575],{"class":412}," initLogger",[283,577,416],{"class":408},[283,579,419],{"class":404},[283,581,422],{"class":408},[283,583,584],{"class":374},"evlog",[283,586,428],{"class":408},[283,588,589,591,593,595,597,599,601,604],{"class":285,"line":305},[283,590,405],{"class":404},[283,592,409],{"class":408},[283,594,522],{"class":412},[283,596,416],{"class":408},[283,598,419],{"class":404},[283,600,422],{"class":408},[283,602,603],{"class":374},".\u002Fapp.module",[283,605,428],{"class":408},[283,607,608],{"class":285,"line":311},[283,609,296],{"emptyLinePlaceholder":295},[283,611,612,615,617],{"class":285,"line":317},[283,613,614],{"class":459},"initLogger",[283,616,463],{"class":412},[283,618,466],{"class":408},[283,620,621,624,626,628,631,633,635,638,641],{"class":285,"line":323},[283,622,623],{"class":471},"  env",[283,625,475],{"class":408},[283,627,409],{"class":408},[283,629,630],{"class":471}," service",[283,632,475],{"class":408},[283,634,422],{"class":408},[283,636,637],{"class":374},"my-api",[283,639,640],{"class":408},"'",[283,642,643],{"class":408}," },\n",[283,645,646,648],{"class":285,"line":329},[283,647,507],{"class":408},[283,649,510],{"class":412},[283,651,652],{"class":285,"line":335},[283,653,296],{"emptyLinePlaceholder":295},[283,655,656,659,662,665,668,670,672,675],{"class":285,"line":340},[283,657,658],{"class":518},"const",[283,660,661],{"class":412}," app ",[283,663,664],{"class":408},"=",[283,666,667],{"class":404}," await",[283,669,555],{"class":412},[283,671,486],{"class":408},[283,673,674],{"class":459},"create",[283,676,677],{"class":412},"(AppModule)\n",[283,679,680,683,686,688,691,693,697],{"class":285,"line":346},[283,681,682],{"class":404},"await",[283,684,685],{"class":412}," app",[283,687,486],{"class":408},[283,689,690],{"class":459},"listen",[283,692,463],{"class":412},[283,694,696],{"class":695},"sbssI","3000",[283,698,510],{"class":412},[249,700,701,703],{},[253,702,259],{}," registers as a global module, so the middleware is automatically applied to all routes.",[351,705,121],{"id":706},"wide-events",[249,708,709],{},"Build up context progressively through your controllers and services. One request = one wide event:",[273,711,714],{"className":394,"code":712,"filename":713,"language":397,"meta":279,"style":279},"import { Controller, Get, Param } from '@nestjs\u002Fcommon'\nimport { useLogger } from 'evlog\u002Fnestjs'\n\n@Controller('users')\nexport class UsersController {\n  @Get(':id')\n  async findOne(@Param('id') id: string) {\n    const log = useLogger()\n\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    const orders = await db.findOrders(id)\n    log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n    return { user, orders }\n  }\n}\n","src\u002Fusers.controller.ts",[253,715,716,746,765,769,787,799,818,857,873,877,908,912,937,988,993,1018,1072,1077,1094,1100],{"__ignoreMap":279},[283,717,718,720,722,725,728,731,733,736,738,740,742,744],{"class":285,"line":286},[283,719,405],{"class":404},[283,721,409],{"class":408},[283,723,724],{"class":412}," Controller",[283,726,727],{"class":408},",",[283,729,730],{"class":412}," Get",[283,732,727],{"class":408},[283,734,735],{"class":412}," Param",[283,737,416],{"class":408},[283,739,419],{"class":404},[283,741,422],{"class":408},[283,743,425],{"class":374},[283,745,428],{"class":408},[283,747,748,750,752,755,757,759,761,763],{"class":285,"line":292},[283,749,405],{"class":404},[283,751,409],{"class":408},[283,753,754],{"class":412}," useLogger",[283,756,416],{"class":408},[283,758,419],{"class":404},[283,760,422],{"class":408},[283,762,255],{"class":374},[283,764,428],{"class":408},[283,766,767],{"class":285,"line":299},[283,768,296],{"emptyLinePlaceholder":295},[283,770,771,773,776,778,780,783,785],{"class":285,"line":305},[283,772,456],{"class":408},[283,774,775],{"class":459},"Controller",[283,777,463],{"class":412},[283,779,640],{"class":408},[283,781,782],{"class":374},"users",[283,784,640],{"class":408},[283,786,510],{"class":412},[283,788,789,791,793,796],{"class":285,"line":311},[283,790,515],{"class":404},[283,792,519],{"class":518},[283,794,795],{"class":370}," UsersController",[283,797,798],{"class":408}," {\n",[283,800,801,804,807,809,811,814,816],{"class":285,"line":317},[283,802,803],{"class":408},"  @",[283,805,806],{"class":459},"Get",[283,808,463],{"class":412},[283,810,640],{"class":408},[283,812,813],{"class":374},":id",[283,815,640],{"class":408},[283,817,510],{"class":412},[283,819,820,823,826,829,832,834,836,839,841,844,847,849,852,855],{"class":285,"line":323},[283,821,822],{"class":518},"  async",[283,824,825],{"class":471}," findOne",[283,827,828],{"class":408},"(@",[283,830,831],{"class":459},"Param",[283,833,463],{"class":412},[283,835,640],{"class":408},[283,837,838],{"class":374},"id",[283,840,640],{"class":408},[283,842,843],{"class":412},") ",[283,845,838],{"class":846},"sHdIc",[283,848,475],{"class":408},[283,850,851],{"class":370}," string",[283,853,854],{"class":408},")",[283,856,798],{"class":408},[283,858,859,862,865,868,870],{"class":285,"line":329},[283,860,861],{"class":518},"    const",[283,863,864],{"class":412}," log",[283,866,867],{"class":408}," =",[283,869,754],{"class":459},[283,871,872],{"class":471},"()\n",[283,874,875],{"class":285,"line":335},[283,876,296],{"emptyLinePlaceholder":295},[283,878,879,882,884,887,889,892,895,897,899,902,904,906],{"class":285,"line":340},[283,880,881],{"class":412},"    log",[283,883,486],{"class":408},[283,885,886],{"class":459},"set",[283,888,463],{"class":471},[283,890,891],{"class":408},"{",[283,893,894],{"class":471}," user",[283,896,475],{"class":408},[283,898,409],{"class":408},[283,900,901],{"class":412}," id",[283,903,416],{"class":408},[283,905,416],{"class":408},[283,907,510],{"class":471},[283,909,910],{"class":285,"line":346},[283,911,296],{"emptyLinePlaceholder":295},[283,913,915,917,919,921,923,926,928,931,933,935],{"class":285,"line":914},12,[283,916,861],{"class":518},[283,918,894],{"class":412},[283,920,867],{"class":408},[283,922,667],{"class":404},[283,924,925],{"class":412}," db",[283,927,486],{"class":408},[283,929,930],{"class":459},"findUser",[283,932,463],{"class":471},[283,934,838],{"class":412},[283,936,510],{"class":471},[283,938,940,942,944,946,948,950,952,954,956,959,961,963,965,968,970,973,975,977,979,982,984,986],{"class":285,"line":939},13,[283,941,881],{"class":412},[283,943,486],{"class":408},[283,945,886],{"class":459},[283,947,463],{"class":471},[283,949,891],{"class":408},[283,951,894],{"class":471},[283,953,475],{"class":408},[283,955,409],{"class":408},[283,957,958],{"class":471}," name",[283,960,475],{"class":408},[283,962,894],{"class":412},[283,964,486],{"class":408},[283,966,967],{"class":412},"name",[283,969,727],{"class":408},[283,971,972],{"class":471}," plan",[283,974,475],{"class":408},[283,976,894],{"class":412},[283,978,486],{"class":408},[283,980,981],{"class":412},"plan",[283,983,416],{"class":408},[283,985,416],{"class":408},[283,987,510],{"class":471},[283,989,991],{"class":285,"line":990},14,[283,992,296],{"emptyLinePlaceholder":295},[283,994,996,998,1001,1003,1005,1007,1009,1012,1014,1016],{"class":285,"line":995},15,[283,997,861],{"class":518},[283,999,1000],{"class":412}," orders",[283,1002,867],{"class":408},[283,1004,667],{"class":404},[283,1006,925],{"class":412},[283,1008,486],{"class":408},[283,1010,1011],{"class":459},"findOrders",[283,1013,463],{"class":471},[283,1015,838],{"class":412},[283,1017,510],{"class":471},[283,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037,1040,1042,1044,1046,1049,1051,1054,1056,1059,1061,1064,1066,1068,1070],{"class":285,"line":1020},16,[283,1022,881],{"class":412},[283,1024,486],{"class":408},[283,1026,886],{"class":459},[283,1028,463],{"class":471},[283,1030,891],{"class":408},[283,1032,1000],{"class":471},[283,1034,475],{"class":408},[283,1036,409],{"class":408},[283,1038,1039],{"class":471}," count",[283,1041,475],{"class":408},[283,1043,1000],{"class":412},[283,1045,486],{"class":408},[283,1047,1048],{"class":412},"length",[283,1050,727],{"class":408},[283,1052,1053],{"class":471}," totalRevenue",[283,1055,475],{"class":408},[283,1057,1058],{"class":459}," sum",[283,1060,463],{"class":471},[283,1062,1063],{"class":412},"orders",[283,1065,843],{"class":471},[283,1067,507],{"class":408},[283,1069,416],{"class":408},[283,1071,510],{"class":471},[283,1073,1075],{"class":285,"line":1074},17,[283,1076,296],{"emptyLinePlaceholder":295},[283,1078,1080,1083,1085,1087,1089,1091],{"class":285,"line":1079},18,[283,1081,1082],{"class":404},"    return",[283,1084,409],{"class":408},[283,1086,894],{"class":412},[283,1088,727],{"class":408},[283,1090,1000],{"class":412},[283,1092,1093],{"class":408}," }\n",[283,1095,1097],{"class":285,"line":1096},19,[283,1098,1099],{"class":408},"  }\n",[283,1101,1103],{"class":285,"line":1102},20,[283,1104,1105],{"class":408},"}\n",[249,1107,1108],{},"All fields are merged into a single wide event emitted when the request completes:",[273,1110,1113],{"className":361,"code":1111,"filename":1112,"language":363,"meta":279,"style":279},"14:58:15 INFO [my-api] GET \u002Fusers\u002Fusr_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",[253,1114,1115,1126,1146,1162],{"__ignoreMap":279},[283,1116,1117,1120,1123],{"class":285,"line":286},[283,1118,1119],{"class":370},"14:58:15",[283,1121,1122],{"class":374}," INFO",[283,1124,1125],{"class":412}," [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n",[283,1127,1128,1131,1134,1137,1140,1143],{"class":285,"line":292},[283,1129,1130],{"class":370},"  ├─",[283,1132,1133],{"class":374}," orders:",[283,1135,1136],{"class":374}," count=",[283,1138,1139],{"class":695},"2",[283,1141,1142],{"class":374}," totalRevenue=",[283,1144,1145],{"class":695},"6298\n",[283,1147,1148,1150,1153,1156,1159],{"class":285,"line":299},[283,1149,1130],{"class":370},[283,1151,1152],{"class":374}," user:",[283,1154,1155],{"class":374}," id=usr_123",[283,1157,1158],{"class":374}," name=Alice",[283,1160,1161],{"class":374}," plan=pro\n",[283,1163,1164,1167,1170],{"class":285,"line":305},[283,1165,1166],{"class":370},"  └─",[283,1168,1169],{"class":374}," requestId:",[283,1171,1172],{"class":374}," 4a8ff3a8-...\n",[351,1174,263],{"id":1175},"uselogger",[249,1177,1178,1179,1181],{},"Use ",[253,1180,263],{}," to access the request-scoped logger from anywhere in the call stack without injecting the request object through your service layer:",[273,1183,1186],{"className":394,"code":1184,"filename":1185,"language":397,"meta":279,"style":279},"import { useLogger } from 'evlog\u002Fnestjs'\n\nexport class UsersService {\n  async 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}\n","src\u002Fusers.service.ts",[253,1187,1188,1206,1210,1221,1240,1252,1278,1282,1304,1350,1354,1361,1365],{"__ignoreMap":279},[283,1189,1190,1192,1194,1196,1198,1200,1202,1204],{"class":285,"line":286},[283,1191,405],{"class":404},[283,1193,409],{"class":408},[283,1195,754],{"class":412},[283,1197,416],{"class":408},[283,1199,419],{"class":404},[283,1201,422],{"class":408},[283,1203,255],{"class":374},[283,1205,428],{"class":408},[283,1207,1208],{"class":285,"line":292},[283,1209,296],{"emptyLinePlaceholder":295},[283,1211,1212,1214,1216,1219],{"class":285,"line":299},[283,1213,515],{"class":404},[283,1215,519],{"class":518},[283,1217,1218],{"class":370}," UsersService",[283,1220,798],{"class":408},[283,1222,1223,1225,1228,1230,1232,1234,1236,1238],{"class":285,"line":305},[283,1224,822],{"class":518},[283,1226,1227],{"class":471}," findUser",[283,1229,463],{"class":408},[283,1231,838],{"class":846},[283,1233,475],{"class":408},[283,1235,851],{"class":370},[283,1237,854],{"class":408},[283,1239,798],{"class":408},[283,1241,1242,1244,1246,1248,1250],{"class":285,"line":311},[283,1243,861],{"class":518},[283,1245,864],{"class":412},[283,1247,867],{"class":408},[283,1249,754],{"class":459},[283,1251,872],{"class":471},[283,1253,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276],{"class":285,"line":317},[283,1255,881],{"class":412},[283,1257,486],{"class":408},[283,1259,886],{"class":459},[283,1261,463],{"class":471},[283,1263,891],{"class":408},[283,1265,894],{"class":471},[283,1267,475],{"class":408},[283,1269,409],{"class":408},[283,1271,901],{"class":412},[283,1273,416],{"class":408},[283,1275,416],{"class":408},[283,1277,510],{"class":471},[283,1279,1280],{"class":285,"line":323},[283,1281,296],{"emptyLinePlaceholder":295},[283,1283,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302],{"class":285,"line":329},[283,1285,861],{"class":518},[283,1287,894],{"class":412},[283,1289,867],{"class":408},[283,1291,667],{"class":404},[283,1293,925],{"class":412},[283,1295,486],{"class":408},[283,1297,930],{"class":459},[283,1299,463],{"class":471},[283,1301,838],{"class":412},[283,1303,510],{"class":471},[283,1305,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348],{"class":285,"line":335},[283,1307,881],{"class":412},[283,1309,486],{"class":408},[283,1311,886],{"class":459},[283,1313,463],{"class":471},[283,1315,891],{"class":408},[283,1317,894],{"class":471},[283,1319,475],{"class":408},[283,1321,409],{"class":408},[283,1323,958],{"class":471},[283,1325,475],{"class":408},[283,1327,894],{"class":412},[283,1329,486],{"class":408},[283,1331,967],{"class":412},[283,1333,727],{"class":408},[283,1335,972],{"class":471},[283,1337,475],{"class":408},[283,1339,894],{"class":412},[283,1341,486],{"class":408},[283,1343,981],{"class":412},[283,1345,416],{"class":408},[283,1347,416],{"class":408},[283,1349,510],{"class":471},[283,1351,1352],{"class":285,"line":340},[283,1353,296],{"emptyLinePlaceholder":295},[283,1355,1356,1358],{"class":285,"line":346},[283,1357,1082],{"class":404},[283,1359,1360],{"class":412}," user\n",[283,1362,1363],{"class":285,"line":914},[283,1364,1099],{"class":408},[283,1366,1367],{"class":285,"line":939},[283,1368,1105],{"class":408},[273,1370,1372],{"className":394,"code":1371,"filename":713,"language":397,"meta":279,"style":279},"@Controller('users')\nexport class UsersController {\n  @Get(':id')\n  findOne(@Param('id') id: string) {\n    return this.usersService.findUser(id)\n  }\n}\n",[253,1373,1374,1390,1400,1416,1445,1465,1469],{"__ignoreMap":279},[283,1375,1376,1378,1380,1382,1384,1386,1388],{"class":285,"line":286},[283,1377,456],{"class":408},[283,1379,775],{"class":459},[283,1381,463],{"class":412},[283,1383,640],{"class":408},[283,1385,782],{"class":374},[283,1387,640],{"class":408},[283,1389,510],{"class":412},[283,1391,1392,1394,1396,1398],{"class":285,"line":292},[283,1393,515],{"class":404},[283,1395,519],{"class":518},[283,1397,795],{"class":370},[283,1399,798],{"class":408},[283,1401,1402,1404,1406,1408,1410,1412,1414],{"class":285,"line":299},[283,1403,803],{"class":408},[283,1405,806],{"class":459},[283,1407,463],{"class":412},[283,1409,640],{"class":408},[283,1411,813],{"class":374},[283,1413,640],{"class":408},[283,1415,510],{"class":412},[283,1417,1418,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443],{"class":285,"line":305},[283,1419,1420],{"class":471},"  findOne",[283,1422,828],{"class":408},[283,1424,831],{"class":459},[283,1426,463],{"class":412},[283,1428,640],{"class":408},[283,1430,838],{"class":374},[283,1432,640],{"class":408},[283,1434,843],{"class":412},[283,1436,838],{"class":846},[283,1438,475],{"class":408},[283,1440,851],{"class":370},[283,1442,854],{"class":408},[283,1444,798],{"class":408},[283,1446,1447,1449,1452,1455,1457,1459,1461,1463],{"class":285,"line":311},[283,1448,1082],{"class":404},[283,1450,1451],{"class":408}," this.",[283,1453,1454],{"class":412},"usersService",[283,1456,486],{"class":408},[283,1458,930],{"class":459},[283,1460,463],{"class":471},[283,1462,838],{"class":412},[283,1464,510],{"class":471},[283,1466,1467],{"class":285,"line":317},[283,1468,1099],{"class":408},[283,1470,1471],{"class":285,"line":323},[283,1472,1105],{"class":408},[249,1474,1475,1476,1478,1479,1481,1482,1484,1485,1488],{},"Both ",[253,1477,267],{}," and ",[253,1480,263],{}," return the same logger instance. ",[253,1483,263],{}," uses ",[253,1486,1487],{},"AsyncLocalStorage"," to propagate the logger across async boundaries.",[351,1490,1492],{"id":1491},"error-handling","Error Handling",[249,1494,1178,1495,1498,1499,1502,1503,1506,1507,1510],{},[253,1496,1497],{},"createError"," for structured errors with ",[253,1500,1501],{},"why",", ",[253,1504,1505],{},"fix",", and ",[253,1508,1509],{},"link"," fields. Create a NestJS exception filter to log and format errors:",[273,1512,1515],{"className":394,"code":1513,"filename":1514,"language":397,"meta":279,"style":279},"import { Catch } from '@nestjs\u002Fcommon'\nimport type { ExceptionFilter, ArgumentsHost } from '@nestjs\u002Fcommon'\nimport { parseError } from 'evlog'\nimport { useLogger } from 'evlog\u002Fnestjs'\n\n@Catch()\nexport class EvlogExceptionFilter implements ExceptionFilter {\n  catch(exception: unknown, host: ArgumentsHost) {\n    const response = host.switchToHttp().getResponse()\n    const error = exception instanceof Error ? exception : new Error(String(exception))\n\n    try { useLogger().error(error) } catch {}\n\n    const parsed = parseError(error)\n    response.status(parsed.status).json({\n      message: parsed.message,\n      why: parsed.why,\n      fix: parsed.fix,\n      link: parsed.link,\n    })\n  }\n}\n","src\u002Fevlog-exception.filter.ts",[253,1516,1517,1536,1563,1582,1600,1604,1613,1629,1657,1682,1725,1729,1758,1762,1779,1809,1825,1840,1855,1870,1877,1882],{"__ignoreMap":279},[283,1518,1519,1521,1523,1526,1528,1530,1532,1534],{"class":285,"line":286},[283,1520,405],{"class":404},[283,1522,409],{"class":408},[283,1524,1525],{"class":412}," Catch",[283,1527,416],{"class":408},[283,1529,419],{"class":404},[283,1531,422],{"class":408},[283,1533,425],{"class":374},[283,1535,428],{"class":408},[283,1537,1538,1540,1543,1545,1548,1550,1553,1555,1557,1559,1561],{"class":285,"line":292},[283,1539,405],{"class":404},[283,1541,1542],{"class":404}," type",[283,1544,409],{"class":408},[283,1546,1547],{"class":412}," ExceptionFilter",[283,1549,727],{"class":408},[283,1551,1552],{"class":412}," ArgumentsHost",[283,1554,416],{"class":408},[283,1556,419],{"class":404},[283,1558,422],{"class":408},[283,1560,425],{"class":374},[283,1562,428],{"class":408},[283,1564,1565,1567,1569,1572,1574,1576,1578,1580],{"class":285,"line":299},[283,1566,405],{"class":404},[283,1568,409],{"class":408},[283,1570,1571],{"class":412}," parseError",[283,1573,416],{"class":408},[283,1575,419],{"class":404},[283,1577,422],{"class":408},[283,1579,584],{"class":374},[283,1581,428],{"class":408},[283,1583,1584,1586,1588,1590,1592,1594,1596,1598],{"class":285,"line":305},[283,1585,405],{"class":404},[283,1587,409],{"class":408},[283,1589,754],{"class":412},[283,1591,416],{"class":408},[283,1593,419],{"class":404},[283,1595,422],{"class":408},[283,1597,255],{"class":374},[283,1599,428],{"class":408},[283,1601,1602],{"class":285,"line":311},[283,1603,296],{"emptyLinePlaceholder":295},[283,1605,1606,1608,1611],{"class":285,"line":317},[283,1607,456],{"class":408},[283,1609,1610],{"class":459},"Catch",[283,1612,872],{"class":412},[283,1614,1615,1617,1619,1622,1625,1627],{"class":285,"line":323},[283,1616,515],{"class":404},[283,1618,519],{"class":518},[283,1620,1621],{"class":370}," EvlogExceptionFilter",[283,1623,1624],{"class":518}," implements",[283,1626,1547],{"class":370},[283,1628,798],{"class":408},[283,1630,1631,1634,1636,1639,1641,1644,1646,1649,1651,1653,1655],{"class":285,"line":329},[283,1632,1633],{"class":471},"  catch",[283,1635,463],{"class":408},[283,1637,1638],{"class":846},"exception",[283,1640,475],{"class":408},[283,1642,1643],{"class":370}," unknown",[283,1645,727],{"class":408},[283,1647,1648],{"class":846}," host",[283,1650,475],{"class":408},[283,1652,1552],{"class":370},[283,1654,854],{"class":408},[283,1656,798],{"class":408},[283,1658,1659,1661,1664,1666,1668,1670,1673,1675,1677,1680],{"class":285,"line":335},[283,1660,861],{"class":518},[283,1662,1663],{"class":412}," response",[283,1665,867],{"class":408},[283,1667,1648],{"class":412},[283,1669,486],{"class":408},[283,1671,1672],{"class":459},"switchToHttp",[283,1674,492],{"class":471},[283,1676,486],{"class":408},[283,1678,1679],{"class":459},"getResponse",[283,1681,872],{"class":471},[283,1683,1684,1686,1689,1691,1694,1697,1700,1703,1705,1708,1711,1713,1715,1718,1720,1722],{"class":285,"line":340},[283,1685,861],{"class":518},[283,1687,1688],{"class":412}," error",[283,1690,867],{"class":408},[283,1692,1693],{"class":412}," exception",[283,1695,1696],{"class":408}," instanceof",[283,1698,1699],{"class":370}," Error",[283,1701,1702],{"class":408}," ?",[283,1704,1693],{"class":412},[283,1706,1707],{"class":408}," :",[283,1709,1710],{"class":408}," new",[283,1712,1699],{"class":459},[283,1714,463],{"class":471},[283,1716,1717],{"class":459},"String",[283,1719,463],{"class":471},[283,1721,1638],{"class":412},[283,1723,1724],{"class":471},"))\n",[283,1726,1727],{"class":285,"line":346},[283,1728,296],{"emptyLinePlaceholder":295},[283,1730,1731,1734,1736,1738,1740,1742,1745,1747,1749,1751,1753,1756],{"class":285,"line":914},[283,1732,1733],{"class":404},"    try",[283,1735,409],{"class":408},[283,1737,754],{"class":459},[283,1739,492],{"class":471},[283,1741,486],{"class":408},[283,1743,1744],{"class":459},"error",[283,1746,463],{"class":471},[283,1748,1744],{"class":412},[283,1750,843],{"class":471},[283,1752,507],{"class":408},[283,1754,1755],{"class":404}," catch",[283,1757,525],{"class":408},[283,1759,1760],{"class":285,"line":939},[283,1761,296],{"emptyLinePlaceholder":295},[283,1763,1764,1766,1769,1771,1773,1775,1777],{"class":285,"line":990},[283,1765,861],{"class":518},[283,1767,1768],{"class":412}," parsed",[283,1770,867],{"class":408},[283,1772,1571],{"class":459},[283,1774,463],{"class":471},[283,1776,1744],{"class":412},[283,1778,510],{"class":471},[283,1780,1781,1784,1786,1789,1791,1794,1796,1798,1800,1802,1805,1807],{"class":285,"line":995},[283,1782,1783],{"class":412},"    response",[283,1785,486],{"class":408},[283,1787,1788],{"class":459},"status",[283,1790,463],{"class":471},[283,1792,1793],{"class":412},"parsed",[283,1795,486],{"class":408},[283,1797,1788],{"class":412},[283,1799,854],{"class":471},[283,1801,486],{"class":408},[283,1803,1804],{"class":459},"json",[283,1806,463],{"class":471},[283,1808,466],{"class":408},[283,1810,1811,1814,1816,1818,1820,1823],{"class":285,"line":1020},[283,1812,1813],{"class":471},"      message",[283,1815,475],{"class":408},[283,1817,1768],{"class":412},[283,1819,486],{"class":408},[283,1821,1822],{"class":412},"message",[283,1824,495],{"class":408},[283,1826,1827,1830,1832,1834,1836,1838],{"class":285,"line":1074},[283,1828,1829],{"class":471},"      why",[283,1831,475],{"class":408},[283,1833,1768],{"class":412},[283,1835,486],{"class":408},[283,1837,1501],{"class":412},[283,1839,495],{"class":408},[283,1841,1842,1845,1847,1849,1851,1853],{"class":285,"line":1079},[283,1843,1844],{"class":471},"      fix",[283,1846,475],{"class":408},[283,1848,1768],{"class":412},[283,1850,486],{"class":408},[283,1852,1505],{"class":412},[283,1854,495],{"class":408},[283,1856,1857,1860,1862,1864,1866,1868],{"class":285,"line":1096},[283,1858,1859],{"class":471},"      link",[283,1861,475],{"class":408},[283,1863,1768],{"class":412},[283,1865,486],{"class":408},[283,1867,1509],{"class":412},[283,1869,495],{"class":408},[283,1871,1872,1875],{"class":285,"line":1102},[283,1873,1874],{"class":408},"    }",[283,1876,510],{"class":471},[283,1878,1880],{"class":285,"line":1879},21,[283,1881,1099],{"class":408},[283,1883,1885],{"class":285,"line":1884},22,[283,1886,1105],{"class":408},[249,1888,1889],{},"Apply it to your controllers:",[273,1891,1894],{"className":394,"code":1892,"filename":1893,"language":397,"meta":279,"style":279},"import { Controller, Get, UseFilters } from '@nestjs\u002Fcommon'\nimport { createError } from 'evlog'\nimport { EvlogExceptionFilter } from '.\u002Fevlog-exception.filter'\n\n@Controller()\n@UseFilters(new EvlogExceptionFilter())\nexport class CheckoutController {\n  @Get('checkout')\n  checkout() {\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:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n    })\n  }\n}\n","src\u002Fcheckout.controller.ts",[253,1895,1896,1923,1942,1961,1965,1973,1990,2001,2018,2027,2038,2053,2065,2080,2095,2110,2116,2120],{"__ignoreMap":279},[283,1897,1898,1900,1902,1904,1906,1908,1910,1913,1915,1917,1919,1921],{"class":285,"line":286},[283,1899,405],{"class":404},[283,1901,409],{"class":408},[283,1903,724],{"class":412},[283,1905,727],{"class":408},[283,1907,730],{"class":412},[283,1909,727],{"class":408},[283,1911,1912],{"class":412}," UseFilters",[283,1914,416],{"class":408},[283,1916,419],{"class":404},[283,1918,422],{"class":408},[283,1920,425],{"class":374},[283,1922,428],{"class":408},[283,1924,1925,1927,1929,1932,1934,1936,1938,1940],{"class":285,"line":292},[283,1926,405],{"class":404},[283,1928,409],{"class":408},[283,1930,1931],{"class":412}," createError",[283,1933,416],{"class":408},[283,1935,419],{"class":404},[283,1937,422],{"class":408},[283,1939,584],{"class":374},[283,1941,428],{"class":408},[283,1943,1944,1946,1948,1950,1952,1954,1956,1959],{"class":285,"line":299},[283,1945,405],{"class":404},[283,1947,409],{"class":408},[283,1949,1621],{"class":412},[283,1951,416],{"class":408},[283,1953,419],{"class":404},[283,1955,422],{"class":408},[283,1957,1958],{"class":374},".\u002Fevlog-exception.filter",[283,1960,428],{"class":408},[283,1962,1963],{"class":285,"line":305},[283,1964,296],{"emptyLinePlaceholder":295},[283,1966,1967,1969,1971],{"class":285,"line":311},[283,1968,456],{"class":408},[283,1970,775],{"class":459},[283,1972,872],{"class":412},[283,1974,1975,1977,1980,1982,1985,1987],{"class":285,"line":317},[283,1976,456],{"class":408},[283,1978,1979],{"class":459},"UseFilters",[283,1981,463],{"class":412},[283,1983,1984],{"class":408},"new",[283,1986,1621],{"class":459},[283,1988,1989],{"class":412},"())\n",[283,1991,1992,1994,1996,1999],{"class":285,"line":323},[283,1993,515],{"class":404},[283,1995,519],{"class":518},[283,1997,1998],{"class":370}," CheckoutController",[283,2000,798],{"class":408},[283,2002,2003,2005,2007,2009,2011,2014,2016],{"class":285,"line":329},[283,2004,803],{"class":408},[283,2006,806],{"class":459},[283,2008,463],{"class":412},[283,2010,640],{"class":408},[283,2012,2013],{"class":374},"checkout",[283,2015,640],{"class":408},[283,2017,510],{"class":412},[283,2019,2020,2023,2025],{"class":285,"line":335},[283,2021,2022],{"class":471},"  checkout",[283,2024,492],{"class":408},[283,2026,798],{"class":408},[283,2028,2029,2032,2034,2036],{"class":285,"line":340},[283,2030,2031],{"class":404},"    throw",[283,2033,1931],{"class":459},[283,2035,463],{"class":471},[283,2037,466],{"class":408},[283,2039,2040,2042,2044,2046,2049,2051],{"class":285,"line":346},[283,2041,1813],{"class":471},[283,2043,475],{"class":408},[283,2045,422],{"class":408},[283,2047,2048],{"class":374},"Payment failed",[283,2050,640],{"class":408},[283,2052,495],{"class":408},[283,2054,2055,2058,2060,2063],{"class":285,"line":914},[283,2056,2057],{"class":471},"      status",[283,2059,475],{"class":408},[283,2061,2062],{"class":695}," 402",[283,2064,495],{"class":408},[283,2066,2067,2069,2071,2073,2076,2078],{"class":285,"line":939},[283,2068,1829],{"class":471},[283,2070,475],{"class":408},[283,2072,422],{"class":408},[283,2074,2075],{"class":374},"Card declined by issuer",[283,2077,640],{"class":408},[283,2079,495],{"class":408},[283,2081,2082,2084,2086,2088,2091,2093],{"class":285,"line":990},[283,2083,1844],{"class":471},[283,2085,475],{"class":408},[283,2087,422],{"class":408},[283,2089,2090],{"class":374},"Try a different payment method",[283,2092,640],{"class":408},[283,2094,495],{"class":408},[283,2096,2097,2099,2101,2103,2106,2108],{"class":285,"line":995},[283,2098,1859],{"class":471},[283,2100,475],{"class":408},[283,2102,422],{"class":408},[283,2104,2105],{"class":374},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[283,2107,640],{"class":408},[283,2109,495],{"class":408},[283,2111,2112,2114],{"class":285,"line":1020},[283,2113,1874],{"class":408},[283,2115,510],{"class":471},[283,2117,2118],{"class":285,"line":1074},[283,2119,1099],{"class":408},[283,2121,2122],{"class":285,"line":1079},[283,2123,1105],{"class":408},[249,2125,2126],{},"The error is captured and logged with both the custom context and structured error fields:",[273,2128,2130],{"className":361,"code":2129,"filename":1112,"language":363,"meta":279,"style":279},"14:58:20 ERROR [my-api] GET \u002Fcheckout 402 in 3ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  └─ requestId: 880a50ac-...\n",[253,2131,2132,2143,2165],{"__ignoreMap":279},[283,2133,2134,2137,2140],{"class":285,"line":286},[283,2135,2136],{"class":370},"14:58:20",[283,2138,2139],{"class":374}," ERROR",[283,2141,2142],{"class":412}," [my-api] GET \u002Fcheckout 402 in 3ms\n",[283,2144,2145,2147,2150,2153,2156,2159,2162],{"class":285,"line":292},[283,2146,1130],{"class":370},[283,2148,2149],{"class":374}," error:",[283,2151,2152],{"class":374}," name=EvlogError",[283,2154,2155],{"class":374}," message=Payment",[283,2157,2158],{"class":374}," failed",[283,2160,2161],{"class":374}," status=",[283,2163,2164],{"class":695},"402\n",[283,2166,2167,2169,2171],{"class":285,"line":299},[283,2168,1166],{"class":370},[283,2170,1169],{"class":374},[283,2172,2173],{"class":374}," 880a50ac-...\n",[351,2175,150],{"id":2176},"configuration",[249,2178,2179,2180,2184,2185,2187],{},"See the ",[2181,2182,2183],"a",{"href":151},"Configuration reference"," for all available options (",[253,2186,614],{},", middleware options, sampling, silent mode, etc.).",[351,2189,2191],{"id":2190},"drain-enrichers","Drain & Enrichers",[249,2193,2194,2195,475],{},"Configure drain adapters and enrichers in ",[253,2196,259],{},[273,2198,2200],{"className":394,"code":2199,"filename":396,"language":397,"meta":279,"style":279},"import { Module } from '@nestjs\u002Fcommon'\nimport { EvlogModule } from 'evlog\u002Fnestjs'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\nconst userAgent = createUserAgentEnricher()\n\n@Module({\n  imports: [\n    EvlogModule.forRoot({\n      drain: createAxiomDrain(),\n      enrich: (ctx) => {\n        userAgent(ctx)\n        ctx.event.region = process.env.FLY_REGION\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n",[253,2201,2202,2220,2238,2258,2278,2282,2295,2299,2309,2317,2329,2342,2362,2373,2403,2408,2416,2422,2428],{"__ignoreMap":279},[283,2203,2204,2206,2208,2210,2212,2214,2216,2218],{"class":285,"line":286},[283,2205,405],{"class":404},[283,2207,409],{"class":408},[283,2209,413],{"class":412},[283,2211,416],{"class":408},[283,2213,419],{"class":404},[283,2215,422],{"class":408},[283,2217,425],{"class":374},[283,2219,428],{"class":408},[283,2221,2222,2224,2226,2228,2230,2232,2234,2236],{"class":285,"line":292},[283,2223,405],{"class":404},[283,2225,409],{"class":408},[283,2227,437],{"class":412},[283,2229,416],{"class":408},[283,2231,419],{"class":404},[283,2233,422],{"class":408},[283,2235,255],{"class":374},[283,2237,428],{"class":408},[283,2239,2240,2242,2244,2247,2249,2251,2253,2256],{"class":285,"line":299},[283,2241,405],{"class":404},[283,2243,409],{"class":408},[283,2245,2246],{"class":412}," createAxiomDrain",[283,2248,416],{"class":408},[283,2250,419],{"class":404},[283,2252,422],{"class":408},[283,2254,2255],{"class":374},"evlog\u002Faxiom",[283,2257,428],{"class":408},[283,2259,2260,2262,2264,2267,2269,2271,2273,2276],{"class":285,"line":305},[283,2261,405],{"class":404},[283,2263,409],{"class":408},[283,2265,2266],{"class":412}," createUserAgentEnricher",[283,2268,416],{"class":408},[283,2270,419],{"class":404},[283,2272,422],{"class":408},[283,2274,2275],{"class":374},"evlog\u002Fenrichers",[283,2277,428],{"class":408},[283,2279,2280],{"class":285,"line":311},[283,2281,296],{"emptyLinePlaceholder":295},[283,2283,2284,2286,2289,2291,2293],{"class":285,"line":317},[283,2285,658],{"class":518},[283,2287,2288],{"class":412}," userAgent ",[283,2290,664],{"class":408},[283,2292,2266],{"class":459},[283,2294,872],{"class":412},[283,2296,2297],{"class":285,"line":323},[283,2298,296],{"emptyLinePlaceholder":295},[283,2300,2301,2303,2305,2307],{"class":285,"line":329},[283,2302,456],{"class":408},[283,2304,460],{"class":459},[283,2306,463],{"class":412},[283,2308,466],{"class":408},[283,2310,2311,2313,2315],{"class":285,"line":335},[283,2312,472],{"class":471},[283,2314,475],{"class":408},[283,2316,478],{"class":412},[283,2318,2319,2321,2323,2325,2327],{"class":285,"line":340},[283,2320,483],{"class":412},[283,2322,486],{"class":408},[283,2324,489],{"class":459},[283,2326,463],{"class":412},[283,2328,466],{"class":408},[283,2330,2331,2334,2336,2338,2340],{"class":285,"line":346},[283,2332,2333],{"class":471},"      drain",[283,2335,475],{"class":408},[283,2337,2246],{"class":459},[283,2339,492],{"class":412},[283,2341,495],{"class":408},[283,2343,2344,2347,2349,2352,2355,2357,2360],{"class":285,"line":914},[283,2345,2346],{"class":459},"      enrich",[283,2348,475],{"class":408},[283,2350,2351],{"class":408}," (",[283,2353,2354],{"class":846},"ctx",[283,2356,854],{"class":408},[283,2358,2359],{"class":518}," =>",[283,2361,798],{"class":408},[283,2363,2364,2367,2369,2371],{"class":285,"line":939},[283,2365,2366],{"class":459},"        userAgent",[283,2368,463],{"class":471},[283,2370,2354],{"class":412},[283,2372,510],{"class":471},[283,2374,2375,2378,2380,2383,2385,2388,2390,2393,2395,2398,2400],{"class":285,"line":990},[283,2376,2377],{"class":412},"        ctx",[283,2379,486],{"class":408},[283,2381,2382],{"class":412},"event",[283,2384,486],{"class":408},[283,2386,2387],{"class":412},"region",[283,2389,867],{"class":408},[283,2391,2392],{"class":412}," process",[283,2394,486],{"class":408},[283,2396,2397],{"class":412},"env",[283,2399,486],{"class":408},[283,2401,2402],{"class":412},"FLY_REGION\n",[283,2404,2405],{"class":285,"line":995},[283,2406,2407],{"class":408},"      },\n",[283,2409,2410,2412,2414],{"class":285,"line":1020},[283,2411,1874],{"class":408},[283,2413,854],{"class":412},[283,2415,495],{"class":408},[283,2417,2418,2420],{"class":285,"line":1074},[283,2419,500],{"class":412},[283,2421,495],{"class":408},[283,2423,2424,2426],{"class":285,"line":1079},[283,2425,507],{"class":408},[283,2427,510],{"class":412},[283,2429,2430,2432,2434,2436],{"class":285,"line":1096},[283,2431,515],{"class":404},[283,2433,519],{"class":518},[283,2435,522],{"class":370},[283,2437,525],{"class":408},[355,2439,2441],{"id":2440},"async-configuration","Async Configuration",[249,2443,1178,2444,2447,2448,2451],{},[253,2445,2446],{},"forRootAsync()"," when options depend on other providers (e.g. ",[253,2449,2450],{},"ConfigService","):",[273,2453,2455],{"className":394,"code":2454,"filename":396,"language":397,"meta":279,"style":279},"import { Module } from '@nestjs\u002Fcommon'\nimport { ConfigModule, ConfigService } from '@nestjs\u002Fconfig'\nimport { EvlogModule } from 'evlog\u002Fnestjs'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\n@Module({\n  imports: [\n    ConfigModule.forRoot(),\n    EvlogModule.forRootAsync({\n      imports: [ConfigModule],\n      inject: [ConfigService],\n      useFactory: (config: ConfigService) => ({\n        drain: createAxiomDrain({ token: config.get('AXIOM_TOKEN') }),\n      }),\n    }),\n  ],\n})\nexport class AppModule {}\n",[253,2456,2457,2475,2500,2518,2536,2540,2550,2558,2571,2584,2596,2608,2632,2675,2684,2692,2698,2704],{"__ignoreMap":279},[283,2458,2459,2461,2463,2465,2467,2469,2471,2473],{"class":285,"line":286},[283,2460,405],{"class":404},[283,2462,409],{"class":408},[283,2464,413],{"class":412},[283,2466,416],{"class":408},[283,2468,419],{"class":404},[283,2470,422],{"class":408},[283,2472,425],{"class":374},[283,2474,428],{"class":408},[283,2476,2477,2479,2481,2484,2486,2489,2491,2493,2495,2498],{"class":285,"line":292},[283,2478,405],{"class":404},[283,2480,409],{"class":408},[283,2482,2483],{"class":412}," ConfigModule",[283,2485,727],{"class":408},[283,2487,2488],{"class":412}," ConfigService",[283,2490,416],{"class":408},[283,2492,419],{"class":404},[283,2494,422],{"class":408},[283,2496,2497],{"class":374},"@nestjs\u002Fconfig",[283,2499,428],{"class":408},[283,2501,2502,2504,2506,2508,2510,2512,2514,2516],{"class":285,"line":299},[283,2503,405],{"class":404},[283,2505,409],{"class":408},[283,2507,437],{"class":412},[283,2509,416],{"class":408},[283,2511,419],{"class":404},[283,2513,422],{"class":408},[283,2515,255],{"class":374},[283,2517,428],{"class":408},[283,2519,2520,2522,2524,2526,2528,2530,2532,2534],{"class":285,"line":305},[283,2521,405],{"class":404},[283,2523,409],{"class":408},[283,2525,2246],{"class":412},[283,2527,416],{"class":408},[283,2529,419],{"class":404},[283,2531,422],{"class":408},[283,2533,2255],{"class":374},[283,2535,428],{"class":408},[283,2537,2538],{"class":285,"line":311},[283,2539,296],{"emptyLinePlaceholder":295},[283,2541,2542,2544,2546,2548],{"class":285,"line":317},[283,2543,456],{"class":408},[283,2545,460],{"class":459},[283,2547,463],{"class":412},[283,2549,466],{"class":408},[283,2551,2552,2554,2556],{"class":285,"line":323},[283,2553,472],{"class":471},[283,2555,475],{"class":408},[283,2557,478],{"class":412},[283,2559,2560,2563,2565,2567,2569],{"class":285,"line":329},[283,2561,2562],{"class":412},"    ConfigModule",[283,2564,486],{"class":408},[283,2566,489],{"class":459},[283,2568,492],{"class":412},[283,2570,495],{"class":408},[283,2572,2573,2575,2577,2580,2582],{"class":285,"line":335},[283,2574,483],{"class":412},[283,2576,486],{"class":408},[283,2578,2579],{"class":459},"forRootAsync",[283,2581,463],{"class":412},[283,2583,466],{"class":408},[283,2585,2586,2589,2591,2594],{"class":285,"line":340},[283,2587,2588],{"class":471},"      imports",[283,2590,475],{"class":408},[283,2592,2593],{"class":412}," [ConfigModule]",[283,2595,495],{"class":408},[283,2597,2598,2601,2603,2606],{"class":285,"line":346},[283,2599,2600],{"class":471},"      inject",[283,2602,475],{"class":408},[283,2604,2605],{"class":412}," [ConfigService]",[283,2607,495],{"class":408},[283,2609,2610,2613,2615,2617,2620,2622,2624,2626,2628,2630],{"class":285,"line":914},[283,2611,2612],{"class":459},"      useFactory",[283,2614,475],{"class":408},[283,2616,2351],{"class":408},[283,2618,2619],{"class":846},"config",[283,2621,475],{"class":408},[283,2623,2488],{"class":370},[283,2625,854],{"class":408},[283,2627,2359],{"class":518},[283,2629,2351],{"class":412},[283,2631,466],{"class":408},[283,2633,2634,2637,2639,2641,2643,2645,2648,2650,2653,2655,2658,2660,2662,2665,2667,2669,2671,2673],{"class":285,"line":939},[283,2635,2636],{"class":471},"        drain",[283,2638,475],{"class":408},[283,2640,2246],{"class":459},[283,2642,463],{"class":412},[283,2644,891],{"class":408},[283,2646,2647],{"class":471}," token",[283,2649,475],{"class":408},[283,2651,2652],{"class":412}," config",[283,2654,486],{"class":408},[283,2656,2657],{"class":459},"get",[283,2659,463],{"class":412},[283,2661,640],{"class":408},[283,2663,2664],{"class":374},"AXIOM_TOKEN",[283,2666,640],{"class":408},[283,2668,843],{"class":412},[283,2670,507],{"class":408},[283,2672,854],{"class":412},[283,2674,495],{"class":408},[283,2676,2677,2680,2682],{"class":285,"line":990},[283,2678,2679],{"class":408},"      }",[283,2681,854],{"class":412},[283,2683,495],{"class":408},[283,2685,2686,2688,2690],{"class":285,"line":995},[283,2687,1874],{"class":408},[283,2689,854],{"class":412},[283,2691,495],{"class":408},[283,2693,2694,2696],{"class":285,"line":1020},[283,2695,500],{"class":412},[283,2697,495],{"class":408},[283,2699,2700,2702],{"class":285,"line":1074},[283,2701,507],{"class":408},[283,2703,510],{"class":412},[283,2705,2706,2708,2710,2712],{"class":285,"line":1079},[283,2707,515],{"class":404},[283,2709,519],{"class":518},[283,2711,522],{"class":370},[283,2713,525],{"class":408},[355,2715,2717],{"id":2716},"pipeline-batching-retry","Pipeline (Batching & Retry)",[249,2719,2720,2721,2724],{},"For production, wrap your adapter with ",[253,2722,2723],{},"createDrainPipeline"," to batch events and retry on failure:",[273,2726,2728],{"className":394,"code":2727,"filename":396,"language":397,"meta":279,"style":279},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nEvlogModule.forRoot({ drain })\n",[253,2729,2730,2751,2769,2789,2793,2817,2846,2865,2871,2890,2894],{"__ignoreMap":279},[283,2731,2732,2734,2736,2738,2741,2743,2745,2747,2749],{"class":285,"line":286},[283,2733,405],{"class":404},[283,2735,1542],{"class":404},[283,2737,409],{"class":408},[283,2739,2740],{"class":412}," DrainContext",[283,2742,416],{"class":408},[283,2744,419],{"class":404},[283,2746,422],{"class":408},[283,2748,584],{"class":374},[283,2750,428],{"class":408},[283,2752,2753,2755,2757,2759,2761,2763,2765,2767],{"class":285,"line":292},[283,2754,405],{"class":404},[283,2756,409],{"class":408},[283,2758,2246],{"class":412},[283,2760,416],{"class":408},[283,2762,419],{"class":404},[283,2764,422],{"class":408},[283,2766,2255],{"class":374},[283,2768,428],{"class":408},[283,2770,2771,2773,2775,2778,2780,2782,2784,2787],{"class":285,"line":299},[283,2772,405],{"class":404},[283,2774,409],{"class":408},[283,2776,2777],{"class":412}," createDrainPipeline",[283,2779,416],{"class":408},[283,2781,419],{"class":404},[283,2783,422],{"class":408},[283,2785,2786],{"class":374},"evlog\u002Fpipeline",[283,2788,428],{"class":408},[283,2790,2791],{"class":285,"line":305},[283,2792,296],{"emptyLinePlaceholder":295},[283,2794,2795,2797,2800,2802,2804,2807,2810,2813,2815],{"class":285,"line":311},[283,2796,658],{"class":518},[283,2798,2799],{"class":412}," pipeline ",[283,2801,664],{"class":408},[283,2803,2777],{"class":459},[283,2805,2806],{"class":408},"\u003C",[283,2808,2809],{"class":370},"DrainContext",[283,2811,2812],{"class":408},">",[283,2814,463],{"class":412},[283,2816,466],{"class":408},[283,2818,2819,2822,2824,2826,2829,2831,2834,2836,2839,2841,2844],{"class":285,"line":317},[283,2820,2821],{"class":471},"  batch",[283,2823,475],{"class":408},[283,2825,409],{"class":408},[283,2827,2828],{"class":471}," size",[283,2830,475],{"class":408},[283,2832,2833],{"class":695}," 50",[283,2835,727],{"class":408},[283,2837,2838],{"class":471}," intervalMs",[283,2840,475],{"class":408},[283,2842,2843],{"class":695}," 5000",[283,2845,643],{"class":408},[283,2847,2848,2851,2853,2855,2858,2860,2863],{"class":285,"line":323},[283,2849,2850],{"class":471},"  retry",[283,2852,475],{"class":408},[283,2854,409],{"class":408},[283,2856,2857],{"class":471}," maxAttempts",[283,2859,475],{"class":408},[283,2861,2862],{"class":695}," 3",[283,2864,643],{"class":408},[283,2866,2867,2869],{"class":285,"line":329},[283,2868,507],{"class":408},[283,2870,510],{"class":412},[283,2872,2873,2875,2878,2880,2883,2885,2888],{"class":285,"line":335},[283,2874,658],{"class":518},[283,2876,2877],{"class":412}," drain ",[283,2879,664],{"class":408},[283,2881,2882],{"class":459}," pipeline",[283,2884,463],{"class":412},[283,2886,2887],{"class":459},"createAxiomDrain",[283,2889,1989],{"class":412},[283,2891,2892],{"class":285,"line":340},[283,2893,296],{"emptyLinePlaceholder":295},[283,2895,2896,2899,2901,2903,2905,2907,2909,2911],{"class":285,"line":346},[283,2897,2898],{"class":412},"EvlogModule",[283,2900,486],{"class":408},[283,2902,489],{"class":459},[283,2904,463],{"class":412},[283,2906,891],{"class":408},[283,2908,2877],{"class":412},[283,2910,507],{"class":408},[283,2912,510],{"class":412},[2914,2915,2917,2918,2921,2922,2925],"callout",{"color":2916,"icon":13},"info","Call ",[253,2919,2920],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[2181,2923,2924],{"href":210},"Pipeline docs"," for all options.",[351,2927,2929],{"id":2928},"tail-sampling","Tail Sampling",[249,2931,1178,2932,2935],{},[253,2933,2934],{},"keep"," to force-retain specific events regardless of head sampling:",[273,2937,2939],{"className":394,"code":2938,"filename":396,"language":397,"meta":279,"style":279},"EvlogModule.forRoot({\n  drain: createAxiomDrain(),\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n})\n",[253,2940,2941,2953,2966,2983,3028,3033],{"__ignoreMap":279},[283,2942,2943,2945,2947,2949,2951],{"class":285,"line":286},[283,2944,2898],{"class":412},[283,2946,486],{"class":408},[283,2948,489],{"class":459},[283,2950,463],{"class":412},[283,2952,466],{"class":408},[283,2954,2955,2958,2960,2962,2964],{"class":285,"line":292},[283,2956,2957],{"class":471},"  drain",[283,2959,475],{"class":408},[283,2961,2246],{"class":459},[283,2963,492],{"class":412},[283,2965,495],{"class":408},[283,2967,2968,2971,2973,2975,2977,2979,2981],{"class":285,"line":299},[283,2969,2970],{"class":459},"  keep",[283,2972,475],{"class":408},[283,2974,2351],{"class":408},[283,2976,2354],{"class":846},[283,2978,854],{"class":408},[283,2980,2359],{"class":518},[283,2982,798],{"class":408},[283,2984,2985,2988,2990,2992,2994,2997,3000,3003,3005,3007,3010,3013,3015,3017,3019,3022,3024],{"class":285,"line":305},[283,2986,2987],{"class":404},"    if",[283,2989,2351],{"class":471},[283,2991,2354],{"class":412},[283,2993,486],{"class":408},[283,2995,2996],{"class":412},"duration",[283,2998,2999],{"class":408}," &&",[283,3001,3002],{"class":412}," ctx",[283,3004,486],{"class":408},[283,3006,2996],{"class":412},[283,3008,3009],{"class":408}," >",[283,3011,3012],{"class":695}," 2000",[283,3014,843],{"class":471},[283,3016,2354],{"class":412},[283,3018,486],{"class":408},[283,3020,3021],{"class":412},"shouldKeep",[283,3023,867],{"class":408},[283,3025,3027],{"class":3026},"sfNiH"," true\n",[283,3029,3030],{"class":285,"line":311},[283,3031,3032],{"class":408},"  },\n",[283,3034,3035,3037],{"class":285,"line":317},[283,3036,507],{"class":408},[283,3038,510],{"class":412},[351,3040,3042],{"id":3041},"route-filtering","Route Filtering",[249,3044,3045,3046,1478,3049,3052],{},"Control which routes are logged with ",[253,3047,3048],{},"include",[253,3050,3051],{},"exclude"," patterns:",[273,3054,3056],{"className":394,"code":3055,"filename":396,"language":397,"meta":279,"style":279},"EvlogModule.forRoot({\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002F_internal\u002F**', '\u002Fhealth'],\n  routes: {\n    '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n  },\n})\n",[253,3057,3058,3070,3092,3121,3130,3157,3183,3187],{"__ignoreMap":279},[283,3059,3060,3062,3064,3066,3068],{"class":285,"line":286},[283,3061,2898],{"class":412},[283,3063,486],{"class":408},[283,3065,489],{"class":459},[283,3067,463],{"class":412},[283,3069,466],{"class":408},[283,3071,3072,3075,3077,3080,3082,3085,3087,3090],{"class":285,"line":292},[283,3073,3074],{"class":471},"  include",[283,3076,475],{"class":408},[283,3078,3079],{"class":412}," [",[283,3081,640],{"class":408},[283,3083,3084],{"class":374},"\u002Fapi\u002F**",[283,3086,640],{"class":408},[283,3088,3089],{"class":412},"]",[283,3091,495],{"class":408},[283,3093,3094,3097,3099,3101,3103,3106,3108,3110,3112,3115,3117,3119],{"class":285,"line":299},[283,3095,3096],{"class":471},"  exclude",[283,3098,475],{"class":408},[283,3100,3079],{"class":412},[283,3102,640],{"class":408},[283,3104,3105],{"class":374},"\u002F_internal\u002F**",[283,3107,640],{"class":408},[283,3109,727],{"class":408},[283,3111,422],{"class":408},[283,3113,3114],{"class":374},"\u002Fhealth",[283,3116,640],{"class":408},[283,3118,3089],{"class":412},[283,3120,495],{"class":408},[283,3122,3123,3126,3128],{"class":285,"line":305},[283,3124,3125],{"class":471},"  routes",[283,3127,475],{"class":408},[283,3129,798],{"class":408},[283,3131,3132,3135,3138,3140,3142,3144,3146,3148,3150,3153,3155],{"class":285,"line":311},[283,3133,3134],{"class":408},"    '",[283,3136,3137],{"class":471},"\u002Fapi\u002Fauth\u002F**",[283,3139,640],{"class":408},[283,3141,475],{"class":408},[283,3143,409],{"class":408},[283,3145,630],{"class":471},[283,3147,475],{"class":408},[283,3149,422],{"class":408},[283,3151,3152],{"class":374},"auth-service",[283,3154,640],{"class":408},[283,3156,643],{"class":408},[283,3158,3159,3161,3164,3166,3168,3170,3172,3174,3176,3179,3181],{"class":285,"line":317},[283,3160,3134],{"class":408},[283,3162,3163],{"class":471},"\u002Fapi\u002Fpayment\u002F**",[283,3165,640],{"class":408},[283,3167,475],{"class":408},[283,3169,409],{"class":408},[283,3171,630],{"class":471},[283,3173,475],{"class":408},[283,3175,422],{"class":408},[283,3177,3178],{"class":374},"payment-service",[283,3180,640],{"class":408},[283,3182,643],{"class":408},[283,3184,3185],{"class":285,"line":323},[283,3186,3032],{"class":408},[283,3188,3189,3191],{"class":285,"line":329},[283,3190,507],{"class":408},[283,3192,510],{"class":412},[351,3194,3196],{"id":3195},"run-locally","Run Locally",[273,3198,3200],{"className":361,"code":3199,"language":363,"meta":279,"style":279},"git clone https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog.git\ncd evlog\nbun install\nbun run example:nestjs\n",[253,3201,3202,3213,3221,3228],{"__ignoreMap":279},[283,3203,3204,3207,3210],{"class":285,"line":286},[283,3205,3206],{"class":370},"git",[283,3208,3209],{"class":374}," clone",[283,3211,3212],{"class":374}," https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog.git\n",[283,3214,3215,3218],{"class":285,"line":292},[283,3216,3217],{"class":459},"cd",[283,3219,3220],{"class":374}," evlog\n",[283,3222,3223,3225],{"class":285,"line":299},[283,3224,371],{"class":370},[283,3226,3227],{"class":374}," install\n",[283,3229,3230,3232,3235],{"class":285,"line":305},[283,3231,371],{"class":370},[283,3233,3234],{"class":374}," run",[283,3236,3237],{"class":374}," example:nestjs\n",[249,3239,3240,3241,3246],{},"Open ",[2181,3242,3243],{"href":3243,"rel":3244},"http:\u002F\u002Flocalhost:3000",[3245],"nofollow"," to explore the interactive test UI.",[3248,3249,3250],"card-group",{},[3251,3252,3256],"card",{"icon":3253,"title":3254,"to":3255},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fnestjs","Browse the complete NestJS example source on GitHub.",[3258,3259,3260],"style",{},"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 .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 pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":279,"searchDepth":292,"depth":292,"links":3262},[3263,3268,3269,3270,3271,3272,3276,3277,3278],{"id":353,"depth":292,"text":20,"children":3264},[3265,3266,3267],{"id":357,"depth":299,"text":358},{"id":390,"depth":299,"text":391},{"id":528,"depth":299,"text":529},{"id":706,"depth":292,"text":121},{"id":1175,"depth":292,"text":263},{"id":1491,"depth":292,"text":1492},{"id":2176,"depth":292,"text":150},{"id":2190,"depth":292,"text":2191,"children":3273},[3274,3275],{"id":2440,"depth":299,"text":2441},{"id":2716,"depth":299,"text":2717},{"id":2928,"depth":292,"text":2929},{"id":3041,"depth":292,"text":3042},{"id":3195,"depth":292,"text":3196},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in NestJS applications.","md",[3282],{"label":3254,"icon":3253,"to":3255,"color":3283,"variant":3284},"neutral","subtle",{},{"title":66,"icon":69},{"title":66,"description":3279},"LiUoNg8lPRM1ntL02UEKZAJVVmVfmVwHRFSr87mLyBc",[3290,3292],{"title":61,"path":62,"stem":63,"description":3291,"icon":64,"children":-1},"Automatic wide events, structured errors, and logging in TanStack Start API routes and server functions.",{"title":71,"path":72,"stem":73,"description":3293,"icon":74,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Express applications.",1773505333720]