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