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