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