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