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