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