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