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