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