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