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