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