[{"data":1,"prerenderedAt":3769},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nestjs":434,"-integrate-frameworks-nestjs-surround":3764},[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,157],{"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,152],{"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,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"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":192,"body":436,"description":3754,"extension":3755,"links":3756,"meta":3760,"navigation":3761,"path":193,"seo":3762,"stem":194,"__hash__":3763},"docs\u002F3.integrate\u002Fframeworks\u002F06.nestjs.md",{"type":437,"value":438,"toc":3733},"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,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],[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":195},"[\"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 {\n      useLogger().error(error)\n    } catch {\n      \u002F\u002F Outside an evlog request scope — log is unavailable\n    }\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,2151,2169,2179,2185,2190,2194,2211,2241,2257,2273,2289,2305,2312,2317],{"__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],{"class":529,"line":1149},[527,2147,2148],{"class":627},"    try",[527,2150,1033],{"class":631},[527,2152,2153,2156,2158,2160,2163,2165,2167],{"class":529,"line":1174},[527,2154,2155],{"class":687},"      useLogger",[527,2157,722],{"class":700},[527,2159,716],{"class":631},[527,2161,2162],{"class":687},"error",[527,2164,691],{"class":700},[527,2166,2162],{"class":635},[527,2168,742],{"class":700},[527,2170,2171,2174,2177],{"class":529,"line":1225},[527,2172,2173],{"class":631},"    }",[527,2175,2176],{"class":627}," catch",[527,2178,1033],{"class":631},[527,2180,2181],{"class":529,"line":1230},[527,2182,2184],{"class":2183},"sHwdD","      \u002F\u002F Outside an evlog request scope — log is unavailable\n",[527,2186,2187],{"class":529,"line":1255},[527,2188,2189],{"class":631},"    }\n",[527,2191,2192],{"class":529,"line":1309},[527,2193,678],{"emptyLinePlaceholder":677},[527,2195,2196,2198,2201,2203,2205,2207,2209],{"class":529,"line":1314},[527,2197,1096],{"class":751},[527,2199,2200],{"class":635}," parsed",[527,2202,1102],{"class":631},[527,2204,1986],{"class":687},[527,2206,691],{"class":700},[527,2208,2162],{"class":635},[527,2210,742],{"class":700},[527,2212,2213,2216,2218,2221,2223,2226,2228,2230,2232,2234,2237,2239],{"class":529,"line":1331},[527,2214,2215],{"class":635},"    response",[527,2217,716],{"class":631},[527,2219,2220],{"class":687},"status",[527,2222,691],{"class":700},[527,2224,2225],{"class":635},"parsed",[527,2227,716],{"class":631},[527,2229,2220],{"class":635},[527,2231,1089],{"class":700},[527,2233,716],{"class":631},[527,2235,2236],{"class":687},"json",[527,2238,691],{"class":700},[527,2240,694],{"class":631},[527,2242,2243,2246,2248,2250,2252,2255],{"class":529,"line":1337},[527,2244,2245],{"class":700},"      message",[527,2247,704],{"class":631},[527,2249,2200],{"class":635},[527,2251,716],{"class":631},[527,2253,2254],{"class":635},"message",[527,2256,725],{"class":631},[527,2258,2260,2263,2265,2267,2269,2271],{"class":529,"line":2259},21,[527,2261,2262],{"class":700},"      why",[527,2264,704],{"class":631},[527,2266,2200],{"class":635},[527,2268,716],{"class":631},[527,2270,1916],{"class":635},[527,2272,725],{"class":631},[527,2274,2276,2279,2281,2283,2285,2287],{"class":529,"line":2275},22,[527,2277,2278],{"class":700},"      fix",[527,2280,704],{"class":631},[527,2282,2200],{"class":635},[527,2284,716],{"class":631},[527,2286,1920],{"class":635},[527,2288,725],{"class":631},[527,2290,2292,2295,2297,2299,2301,2303],{"class":529,"line":2291},23,[527,2293,2294],{"class":700},"      link",[527,2296,704],{"class":631},[527,2298,2200],{"class":635},[527,2300,716],{"class":631},[527,2302,1924],{"class":635},[527,2304,725],{"class":631},[527,2306,2308,2310],{"class":529,"line":2307},24,[527,2309,2173],{"class":631},[527,2311,742],{"class":700},[527,2313,2315],{"class":529,"line":2314},25,[527,2316,1334],{"class":631},[527,2318,2320],{"class":529,"line":2319},26,[527,2321,1340],{"class":631},[440,2323,2324],{},"Apply it to your controllers:",[517,2326,2329],{"className":617,"code":2327,"filename":2328,"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,2330,2331,2358,2377,2396,2400,2408,2425,2436,2453,2462,2473,2488,2500,2515,2530,2545,2551,2555],{"__ignoreMap":523},[527,2332,2333,2335,2337,2339,2341,2343,2345,2348,2350,2352,2354,2356],{"class":529,"line":530},[527,2334,628],{"class":627},[527,2336,632],{"class":631},[527,2338,959],{"class":635},[527,2340,962],{"class":631},[527,2342,965],{"class":635},[527,2344,962],{"class":631},[527,2346,2347],{"class":635}," UseFilters",[527,2349,639],{"class":631},[527,2351,642],{"class":627},[527,2353,645],{"class":631},[527,2355,648],{"class":536},[527,2357,651],{"class":631},[527,2359,2360,2362,2364,2367,2369,2371,2373,2375],{"class":529,"line":654},[527,2361,628],{"class":627},[527,2363,632],{"class":631},[527,2365,2366],{"class":635}," createError",[527,2368,639],{"class":631},[527,2370,642],{"class":627},[527,2372,645],{"class":631},[527,2374,817],{"class":536},[527,2376,651],{"class":631},[527,2378,2379,2381,2383,2385,2387,2389,2391,2394],{"class":529,"line":674},[527,2380,628],{"class":627},[527,2382,632],{"class":631},[527,2384,2036],{"class":635},[527,2386,639],{"class":631},[527,2388,642],{"class":627},[527,2390,645],{"class":631},[527,2392,2393],{"class":536},".\u002Fevlog-exception.filter",[527,2395,651],{"class":631},[527,2397,2398],{"class":529,"line":681},[527,2399,678],{"emptyLinePlaceholder":677},[527,2401,2402,2404,2406],{"class":529,"line":697},[527,2403,684],{"class":631},[527,2405,1010],{"class":687},[527,2407,1107],{"class":635},[527,2409,2410,2412,2415,2417,2420,2422],{"class":529,"line":710},[527,2411,684],{"class":631},[527,2413,2414],{"class":687},"UseFilters",[527,2416,691],{"class":635},[527,2418,2419],{"class":631},"new",[527,2421,2036],{"class":687},[527,2423,2424],{"class":635},"())\n",[527,2426,2427,2429,2431,2434],{"class":529,"line":728},[527,2428,748],{"class":627},[527,2430,752],{"class":751},[527,2432,2433],{"class":533}," CheckoutController",[527,2435,1033],{"class":631},[527,2437,2438,2440,2442,2444,2446,2449,2451],{"class":529,"line":736},[527,2439,1038],{"class":631},[527,2441,1041],{"class":687},[527,2443,691],{"class":635},[527,2445,873],{"class":631},[527,2447,2448],{"class":536},"checkout",[527,2450,873],{"class":631},[527,2452,742],{"class":635},[527,2454,2455,2458,2460],{"class":529,"line":745},[527,2456,2457],{"class":700},"  checkout",[527,2459,722],{"class":631},[527,2461,1033],{"class":631},[527,2463,2464,2467,2469,2471],{"class":529,"line":889},[527,2465,2466],{"class":627},"    throw",[527,2468,2366],{"class":687},[527,2470,691],{"class":700},[527,2472,694],{"class":631},[527,2474,2475,2477,2479,2481,2484,2486],{"class":529,"line":914},[527,2476,2245],{"class":700},[527,2478,704],{"class":631},[527,2480,645],{"class":631},[527,2482,2483],{"class":536},"Payment failed",[527,2485,873],{"class":631},[527,2487,725],{"class":631},[527,2489,2490,2493,2495,2498],{"class":529,"line":1149},[527,2491,2492],{"class":700},"      status",[527,2494,704],{"class":631},[527,2496,2497],{"class":930}," 402",[527,2499,725],{"class":631},[527,2501,2502,2504,2506,2508,2511,2513],{"class":529,"line":1174},[527,2503,2262],{"class":700},[527,2505,704],{"class":631},[527,2507,645],{"class":631},[527,2509,2510],{"class":536},"Card declined by issuer",[527,2512,873],{"class":631},[527,2514,725],{"class":631},[527,2516,2517,2519,2521,2523,2526,2528],{"class":529,"line":1225},[527,2518,2278],{"class":700},[527,2520,704],{"class":631},[527,2522,645],{"class":631},[527,2524,2525],{"class":536},"Try a different payment method",[527,2527,873],{"class":631},[527,2529,725],{"class":631},[527,2531,2532,2534,2536,2538,2541,2543],{"class":529,"line":1230},[527,2533,2294],{"class":700},[527,2535,704],{"class":631},[527,2537,645],{"class":631},[527,2539,2540],{"class":536},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[527,2542,873],{"class":631},[527,2544,725],{"class":631},[527,2546,2547,2549],{"class":529,"line":1255},[527,2548,2173],{"class":631},[527,2550,742],{"class":700},[527,2552,2553],{"class":529,"line":1309},[527,2554,1334],{"class":631},[527,2556,2557],{"class":529,"line":1314},[527,2558,1340],{"class":631},[440,2560,2561],{},"The error is captured and logged with both the custom context and structured error fields:",[517,2563,2565],{"className":519,"code":2564,"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,2566,2567,2578,2600],{"__ignoreMap":523},[527,2568,2569,2572,2575],{"class":529,"line":530},[527,2570,2571],{"class":533},"14:58:20",[527,2573,2574],{"class":536}," ERROR",[527,2576,2577],{"class":635}," [my-api] GET \u002Fcheckout 402 in 3ms\n",[527,2579,2580,2582,2585,2588,2591,2594,2597],{"class":529,"line":654},[527,2581,1365],{"class":533},[527,2583,2584],{"class":536}," error:",[527,2586,2587],{"class":536}," name=EvlogError",[527,2589,2590],{"class":536}," message=Payment",[527,2592,2593],{"class":536}," failed",[527,2595,2596],{"class":536}," status=",[527,2598,2599],{"class":930},"402\n",[527,2601,2602,2604,2606],{"class":529,"line":674},[527,2603,1401],{"class":533},[527,2605,1404],{"class":536},[527,2607,2608],{"class":536}," 880a50ac-...\n",[505,2610,409],{"id":2611},"configuration",[440,2613,2614,2615,2618,2619,2621],{},"See the ",[494,2616,2617],{"href":410},"Configuration reference"," for all available options (",[444,2620,847],{},", middleware options, sampling, silent mode, etc.).",[505,2623,2625],{"id":2624},"drain-enrichers","Drain & Enrichers",[440,2627,2628,2629,704],{},"Configure drain adapters and enrichers in ",[444,2630,450],{},[517,2632,2634],{"className":617,"code":2633,"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,2635,2636,2654,2672,2692,2712,2716,2729,2733,2743,2751,2763,2776,2795,2806,2836,2841,2849,2855,2861],{"__ignoreMap":523},[527,2637,2638,2640,2642,2644,2646,2648,2650,2652],{"class":529,"line":530},[527,2639,628],{"class":627},[527,2641,632],{"class":631},[527,2643,636],{"class":635},[527,2645,639],{"class":631},[527,2647,642],{"class":627},[527,2649,645],{"class":631},[527,2651,648],{"class":536},[527,2653,651],{"class":631},[527,2655,2656,2658,2660,2662,2664,2666,2668,2670],{"class":529,"line":654},[527,2657,628],{"class":627},[527,2659,632],{"class":631},[527,2661,661],{"class":635},[527,2663,639],{"class":631},[527,2665,642],{"class":627},[527,2667,645],{"class":631},[527,2669,446],{"class":536},[527,2671,651],{"class":631},[527,2673,2674,2676,2678,2681,2683,2685,2687,2690],{"class":529,"line":674},[527,2675,628],{"class":627},[527,2677,632],{"class":631},[527,2679,2680],{"class":635}," createAxiomDrain",[527,2682,639],{"class":631},[527,2684,642],{"class":627},[527,2686,645],{"class":631},[527,2688,2689],{"class":536},"evlog\u002Faxiom",[527,2691,651],{"class":631},[527,2693,2694,2696,2698,2701,2703,2705,2707,2710],{"class":529,"line":681},[527,2695,628],{"class":627},[527,2697,632],{"class":631},[527,2699,2700],{"class":635}," createUserAgentEnricher",[527,2702,639],{"class":631},[527,2704,642],{"class":627},[527,2706,645],{"class":631},[527,2708,2709],{"class":536},"evlog\u002Fenrichers",[527,2711,651],{"class":631},[527,2713,2714],{"class":529,"line":697},[527,2715,678],{"emptyLinePlaceholder":677},[527,2717,2718,2720,2723,2725,2727],{"class":529,"line":710},[527,2719,892],{"class":751},[527,2721,2722],{"class":635}," userAgent ",[527,2724,898],{"class":631},[527,2726,2700],{"class":687},[527,2728,1107],{"class":635},[527,2730,2731],{"class":529,"line":728},[527,2732,678],{"emptyLinePlaceholder":677},[527,2734,2735,2737,2739,2741],{"class":529,"line":736},[527,2736,684],{"class":631},[527,2738,688],{"class":687},[527,2740,691],{"class":635},[527,2742,694],{"class":631},[527,2744,2745,2747,2749],{"class":529,"line":745},[527,2746,701],{"class":700},[527,2748,704],{"class":631},[527,2750,707],{"class":635},[527,2752,2753,2755,2757,2759,2761],{"class":529,"line":889},[527,2754,713],{"class":635},[527,2756,716],{"class":631},[527,2758,719],{"class":687},[527,2760,691],{"class":635},[527,2762,694],{"class":631},[527,2764,2765,2768,2770,2772,2774],{"class":529,"line":914},[527,2766,2767],{"class":700},"      drain",[527,2769,704],{"class":631},[527,2771,2680],{"class":687},[527,2773,722],{"class":635},[527,2775,725],{"class":631},[527,2777,2778,2781,2783,2786,2789,2791,2793],{"class":529,"line":1149},[527,2779,2780],{"class":687},"      enrich",[527,2782,704],{"class":631},[527,2784,2785],{"class":631}," (",[527,2787,2788],{"class":1081},"ctx",[527,2790,1089],{"class":631},[527,2792,1837],{"class":751},[527,2794,1033],{"class":631},[527,2796,2797,2800,2802,2804],{"class":529,"line":1174},[527,2798,2799],{"class":687},"        userAgent",[527,2801,691],{"class":700},[527,2803,2788],{"class":635},[527,2805,742],{"class":700},[527,2807,2808,2811,2813,2816,2818,2821,2823,2826,2828,2831,2833],{"class":529,"line":1225},[527,2809,2810],{"class":635},"        ctx",[527,2812,716],{"class":631},[527,2814,2815],{"class":635},"event",[527,2817,716],{"class":631},[527,2819,2820],{"class":635},"region",[527,2822,1102],{"class":631},[527,2824,2825],{"class":635}," process",[527,2827,716],{"class":631},[527,2829,2830],{"class":635},"env",[527,2832,716],{"class":631},[527,2834,2835],{"class":635},"FLY_REGION\n",[527,2837,2838],{"class":529,"line":1230},[527,2839,2840],{"class":631},"      },\n",[527,2842,2843,2845,2847],{"class":529,"line":1255},[527,2844,2173],{"class":631},[527,2846,1089],{"class":635},[527,2848,725],{"class":631},[527,2850,2851,2853],{"class":529,"line":1309},[527,2852,731],{"class":635},[527,2854,725],{"class":631},[527,2856,2857,2859],{"class":529,"line":1314},[527,2858,739],{"class":631},[527,2860,742],{"class":635},[527,2862,2863,2865,2867,2869],{"class":529,"line":1331},[527,2864,748],{"class":627},[527,2866,752],{"class":751},[527,2868,755],{"class":533},[527,2870,758],{"class":631},[509,2872,2874],{"id":2873},"async-configuration","Async Configuration",[440,2876,1413,2877,2880,2881,2884],{},[444,2878,2879],{},"forRootAsync()"," when options depend on other providers (e.g. ",[444,2882,2883],{},"ConfigService","):",[517,2886,2888],{"className":617,"code":2887,"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({ apiKey: config.get('AXIOM_API_KEY') }),\n      }),\n    }),\n  ],\n})\nexport class AppModule {}\n",[444,2889,2890,2908,2933,2951,2969,2973,2983,2991,3004,3017,3029,3041,3065,3108,3117,3125,3131,3137],{"__ignoreMap":523},[527,2891,2892,2894,2896,2898,2900,2902,2904,2906],{"class":529,"line":530},[527,2893,628],{"class":627},[527,2895,632],{"class":631},[527,2897,636],{"class":635},[527,2899,639],{"class":631},[527,2901,642],{"class":627},[527,2903,645],{"class":631},[527,2905,648],{"class":536},[527,2907,651],{"class":631},[527,2909,2910,2912,2914,2917,2919,2922,2924,2926,2928,2931],{"class":529,"line":654},[527,2911,628],{"class":627},[527,2913,632],{"class":631},[527,2915,2916],{"class":635}," ConfigModule",[527,2918,962],{"class":631},[527,2920,2921],{"class":635}," ConfigService",[527,2923,639],{"class":631},[527,2925,642],{"class":627},[527,2927,645],{"class":631},[527,2929,2930],{"class":536},"@nestjs\u002Fconfig",[527,2932,651],{"class":631},[527,2934,2935,2937,2939,2941,2943,2945,2947,2949],{"class":529,"line":674},[527,2936,628],{"class":627},[527,2938,632],{"class":631},[527,2940,661],{"class":635},[527,2942,639],{"class":631},[527,2944,642],{"class":627},[527,2946,645],{"class":631},[527,2948,446],{"class":536},[527,2950,651],{"class":631},[527,2952,2953,2955,2957,2959,2961,2963,2965,2967],{"class":529,"line":681},[527,2954,628],{"class":627},[527,2956,632],{"class":631},[527,2958,2680],{"class":635},[527,2960,639],{"class":631},[527,2962,642],{"class":627},[527,2964,645],{"class":631},[527,2966,2689],{"class":536},[527,2968,651],{"class":631},[527,2970,2971],{"class":529,"line":697},[527,2972,678],{"emptyLinePlaceholder":677},[527,2974,2975,2977,2979,2981],{"class":529,"line":710},[527,2976,684],{"class":631},[527,2978,688],{"class":687},[527,2980,691],{"class":635},[527,2982,694],{"class":631},[527,2984,2985,2987,2989],{"class":529,"line":728},[527,2986,701],{"class":700},[527,2988,704],{"class":631},[527,2990,707],{"class":635},[527,2992,2993,2996,2998,3000,3002],{"class":529,"line":736},[527,2994,2995],{"class":635},"    ConfigModule",[527,2997,716],{"class":631},[527,2999,719],{"class":687},[527,3001,722],{"class":635},[527,3003,725],{"class":631},[527,3005,3006,3008,3010,3013,3015],{"class":529,"line":745},[527,3007,713],{"class":635},[527,3009,716],{"class":631},[527,3011,3012],{"class":687},"forRootAsync",[527,3014,691],{"class":635},[527,3016,694],{"class":631},[527,3018,3019,3022,3024,3027],{"class":529,"line":889},[527,3020,3021],{"class":700},"      imports",[527,3023,704],{"class":631},[527,3025,3026],{"class":635}," [ConfigModule]",[527,3028,725],{"class":631},[527,3030,3031,3034,3036,3039],{"class":529,"line":914},[527,3032,3033],{"class":700},"      inject",[527,3035,704],{"class":631},[527,3037,3038],{"class":635}," [ConfigService]",[527,3040,725],{"class":631},[527,3042,3043,3046,3048,3050,3053,3055,3057,3059,3061,3063],{"class":529,"line":1149},[527,3044,3045],{"class":687},"      useFactory",[527,3047,704],{"class":631},[527,3049,2785],{"class":631},[527,3051,3052],{"class":1081},"config",[527,3054,704],{"class":631},[527,3056,2921],{"class":533},[527,3058,1089],{"class":631},[527,3060,1837],{"class":751},[527,3062,2785],{"class":635},[527,3064,694],{"class":631},[527,3066,3067,3070,3072,3074,3076,3078,3081,3083,3086,3088,3091,3093,3095,3098,3100,3102,3104,3106],{"class":529,"line":1174},[527,3068,3069],{"class":700},"        drain",[527,3071,704],{"class":631},[527,3073,2680],{"class":687},[527,3075,691],{"class":635},[527,3077,1126],{"class":631},[527,3079,3080],{"class":700}," apiKey",[527,3082,704],{"class":631},[527,3084,3085],{"class":635}," config",[527,3087,716],{"class":631},[527,3089,3090],{"class":687},"get",[527,3092,691],{"class":635},[527,3094,873],{"class":631},[527,3096,3097],{"class":536},"AXIOM_API_KEY",[527,3099,873],{"class":631},[527,3101,1078],{"class":635},[527,3103,739],{"class":631},[527,3105,1089],{"class":635},[527,3107,725],{"class":631},[527,3109,3110,3113,3115],{"class":529,"line":1225},[527,3111,3112],{"class":631},"      }",[527,3114,1089],{"class":635},[527,3116,725],{"class":631},[527,3118,3119,3121,3123],{"class":529,"line":1230},[527,3120,2173],{"class":631},[527,3122,1089],{"class":635},[527,3124,725],{"class":631},[527,3126,3127,3129],{"class":529,"line":1255},[527,3128,731],{"class":635},[527,3130,725],{"class":631},[527,3132,3133,3135],{"class":529,"line":1309},[527,3134,739],{"class":631},[527,3136,742],{"class":635},[527,3138,3139,3141,3143,3145],{"class":529,"line":1314},[527,3140,748],{"class":627},[527,3142,752],{"class":751},[527,3144,755],{"class":533},[527,3146,758],{"class":631},[509,3148,3150],{"id":3149},"pipeline-batching-retry","Pipeline (Batching & Retry)",[440,3152,3153,3154,3157],{},"For production, wrap your adapter with ",[444,3155,3156],{},"createDrainPipeline"," to batch events and retry on failure:",[517,3159,3161],{"className":617,"code":3160,"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,3162,3163,3184,3202,3222,3226,3250,3279,3298,3304,3323,3327],{"__ignoreMap":523},[527,3164,3165,3167,3169,3171,3174,3176,3178,3180,3182],{"class":529,"line":530},[527,3166,628],{"class":627},[527,3168,1957],{"class":627},[527,3170,632],{"class":631},[527,3172,3173],{"class":635}," DrainContext",[527,3175,639],{"class":631},[527,3177,642],{"class":627},[527,3179,645],{"class":631},[527,3181,817],{"class":536},[527,3183,651],{"class":631},[527,3185,3186,3188,3190,3192,3194,3196,3198,3200],{"class":529,"line":654},[527,3187,628],{"class":627},[527,3189,632],{"class":631},[527,3191,2680],{"class":635},[527,3193,639],{"class":631},[527,3195,642],{"class":627},[527,3197,645],{"class":631},[527,3199,2689],{"class":536},[527,3201,651],{"class":631},[527,3203,3204,3206,3208,3211,3213,3215,3217,3220],{"class":529,"line":674},[527,3205,628],{"class":627},[527,3207,632],{"class":631},[527,3209,3210],{"class":635}," createDrainPipeline",[527,3212,639],{"class":631},[527,3214,642],{"class":627},[527,3216,645],{"class":631},[527,3218,3219],{"class":536},"evlog\u002Fpipeline",[527,3221,651],{"class":631},[527,3223,3224],{"class":529,"line":681},[527,3225,678],{"emptyLinePlaceholder":677},[527,3227,3228,3230,3233,3235,3237,3240,3243,3246,3248],{"class":529,"line":697},[527,3229,892],{"class":751},[527,3231,3232],{"class":635}," pipeline ",[527,3234,898],{"class":631},[527,3236,3210],{"class":687},[527,3238,3239],{"class":631},"\u003C",[527,3241,3242],{"class":533},"DrainContext",[527,3244,3245],{"class":631},">",[527,3247,691],{"class":635},[527,3249,694],{"class":631},[527,3251,3252,3255,3257,3259,3262,3264,3267,3269,3272,3274,3277],{"class":529,"line":710},[527,3253,3254],{"class":700},"  batch",[527,3256,704],{"class":631},[527,3258,632],{"class":631},[527,3260,3261],{"class":700}," size",[527,3263,704],{"class":631},[527,3265,3266],{"class":930}," 50",[527,3268,962],{"class":631},[527,3270,3271],{"class":700}," intervalMs",[527,3273,704],{"class":631},[527,3275,3276],{"class":930}," 5000",[527,3278,876],{"class":631},[527,3280,3281,3284,3286,3288,3291,3293,3296],{"class":529,"line":728},[527,3282,3283],{"class":700},"  retry",[527,3285,704],{"class":631},[527,3287,632],{"class":631},[527,3289,3290],{"class":700}," maxAttempts",[527,3292,704],{"class":631},[527,3294,3295],{"class":930}," 3",[527,3297,876],{"class":631},[527,3299,3300,3302],{"class":529,"line":736},[527,3301,739],{"class":631},[527,3303,742],{"class":635},[527,3305,3306,3308,3311,3313,3316,3318,3321],{"class":529,"line":745},[527,3307,892],{"class":751},[527,3309,3310],{"class":635}," drain ",[527,3312,898],{"class":631},[527,3314,3315],{"class":687}," pipeline",[527,3317,691],{"class":635},[527,3319,3320],{"class":687},"createAxiomDrain",[527,3322,2424],{"class":635},[527,3324,3325],{"class":529,"line":889},[527,3326,678],{"emptyLinePlaceholder":677},[527,3328,3329,3332,3334,3336,3338,3340,3342,3344],{"class":529,"line":914},[527,3330,3331],{"class":635},"EvlogModule",[527,3333,716],{"class":631},[527,3335,719],{"class":687},[527,3337,691],{"class":635},[527,3339,1126],{"class":631},[527,3341,3310],{"class":635},[527,3343,739],{"class":631},[527,3345,742],{"class":635},[3347,3348,3350,3351,3354,3355,3358],"callout",{"color":3349,"icon":13},"info","Call ",[444,3352,3353],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[494,3356,3357],{"href":400},"Pipeline docs"," for all options.",[505,3360,3362],{"id":3361},"tail-sampling","Tail Sampling",[440,3364,1413,3365,3368],{},[444,3366,3367],{},"keep"," to force-retain specific events regardless of head sampling:",[517,3370,3372],{"className":617,"code":3371,"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,3373,3374,3386,3399,3416,3460,3465],{"__ignoreMap":523},[527,3375,3376,3378,3380,3382,3384],{"class":529,"line":530},[527,3377,3331],{"class":635},[527,3379,716],{"class":631},[527,3381,719],{"class":687},[527,3383,691],{"class":635},[527,3385,694],{"class":631},[527,3387,3388,3391,3393,3395,3397],{"class":529,"line":654},[527,3389,3390],{"class":700},"  drain",[527,3392,704],{"class":631},[527,3394,2680],{"class":687},[527,3396,722],{"class":635},[527,3398,725],{"class":631},[527,3400,3401,3404,3406,3408,3410,3412,3414],{"class":529,"line":674},[527,3402,3403],{"class":687},"  keep",[527,3405,704],{"class":631},[527,3407,2785],{"class":631},[527,3409,2788],{"class":1081},[527,3411,1089],{"class":631},[527,3413,1837],{"class":751},[527,3415,1033],{"class":631},[527,3417,3418,3421,3423,3425,3427,3430,3433,3436,3438,3440,3443,3446,3448,3450,3452,3455,3457],{"class":529,"line":681},[527,3419,3420],{"class":627},"    if",[527,3422,2785],{"class":700},[527,3424,2788],{"class":635},[527,3426,716],{"class":631},[527,3428,3429],{"class":635},"duration",[527,3431,3432],{"class":631}," &&",[527,3434,3435],{"class":635}," ctx",[527,3437,716],{"class":631},[527,3439,3429],{"class":635},[527,3441,3442],{"class":631}," >",[527,3444,3445],{"class":930}," 2000",[527,3447,1078],{"class":700},[527,3449,2788],{"class":635},[527,3451,716],{"class":631},[527,3453,3454],{"class":635},"shouldKeep",[527,3456,1102],{"class":631},[527,3458,3459],{"class":1871}," true\n",[527,3461,3462],{"class":529,"line":697},[527,3463,3464],{"class":631},"  },\n",[527,3466,3467,3469],{"class":529,"line":710},[527,3468,739],{"class":631},[527,3470,742],{"class":635},[505,3472,3474],{"id":3473},"route-filtering","Route Filtering",[440,3476,3477,3478,1713,3481,3484],{},"Control which routes are logged with ",[444,3479,3480],{},"include",[444,3482,3483],{},"exclude"," patterns:",[517,3486,3488],{"className":617,"code":3487,"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,3489,3490,3502,3524,3553,3562,3589,3615,3619],{"__ignoreMap":523},[527,3491,3492,3494,3496,3498,3500],{"class":529,"line":530},[527,3493,3331],{"class":635},[527,3495,716],{"class":631},[527,3497,719],{"class":687},[527,3499,691],{"class":635},[527,3501,694],{"class":631},[527,3503,3504,3507,3509,3512,3514,3517,3519,3522],{"class":529,"line":654},[527,3505,3506],{"class":700},"  include",[527,3508,704],{"class":631},[527,3510,3511],{"class":635}," [",[527,3513,873],{"class":631},[527,3515,3516],{"class":536},"\u002Fapi\u002F**",[527,3518,873],{"class":631},[527,3520,3521],{"class":635},"]",[527,3523,725],{"class":631},[527,3525,3526,3529,3531,3533,3535,3538,3540,3542,3544,3547,3549,3551],{"class":529,"line":674},[527,3527,3528],{"class":700},"  exclude",[527,3530,704],{"class":631},[527,3532,3511],{"class":635},[527,3534,873],{"class":631},[527,3536,3537],{"class":536},"\u002F_internal\u002F**",[527,3539,873],{"class":631},[527,3541,962],{"class":631},[527,3543,645],{"class":631},[527,3545,3546],{"class":536},"\u002Fhealth",[527,3548,873],{"class":631},[527,3550,3521],{"class":635},[527,3552,725],{"class":631},[527,3554,3555,3558,3560],{"class":529,"line":681},[527,3556,3557],{"class":700},"  routes",[527,3559,704],{"class":631},[527,3561,1033],{"class":631},[527,3563,3564,3567,3570,3572,3574,3576,3578,3580,3582,3585,3587],{"class":529,"line":697},[527,3565,3566],{"class":631},"    '",[527,3568,3569],{"class":700},"\u002Fapi\u002Fauth\u002F**",[527,3571,873],{"class":631},[527,3573,704],{"class":631},[527,3575,632],{"class":631},[527,3577,863],{"class":700},[527,3579,704],{"class":631},[527,3581,645],{"class":631},[527,3583,3584],{"class":536},"auth-service",[527,3586,873],{"class":631},[527,3588,876],{"class":631},[527,3590,3591,3593,3596,3598,3600,3602,3604,3606,3608,3611,3613],{"class":529,"line":710},[527,3592,3566],{"class":631},[527,3594,3595],{"class":700},"\u002Fapi\u002Fpayment\u002F**",[527,3597,873],{"class":631},[527,3599,704],{"class":631},[527,3601,632],{"class":631},[527,3603,863],{"class":700},[527,3605,704],{"class":631},[527,3607,645],{"class":631},[527,3609,3610],{"class":536},"payment-service",[527,3612,873],{"class":631},[527,3614,876],{"class":631},[527,3616,3617],{"class":529,"line":728},[527,3618,3464],{"class":631},[527,3620,3621,3623],{"class":529,"line":736},[527,3622,739],{"class":631},[527,3624,742],{"class":635},[505,3626,3628],{"id":3627},"run-locally","Run Locally",[517,3630,3633],{"className":519,"code":3631,"filename":3632,"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,3634,3635,3646,3654,3661],{"__ignoreMap":523},[527,3636,3637,3640,3643],{"class":529,"line":530},[527,3638,3639],{"class":533},"git",[527,3641,3642],{"class":536}," clone",[527,3644,3645],{"class":536}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[527,3647,3648,3651],{"class":529,"line":654},[527,3649,3650],{"class":687},"cd",[527,3652,3653],{"class":536}," evlog\n",[527,3655,3656,3658],{"class":529,"line":674},[527,3657,521],{"class":533},[527,3659,3660],{"class":536}," install\n",[527,3662,3663,3665,3668],{"class":529,"line":681},[527,3664,521],{"class":533},[527,3666,3667],{"class":536}," run",[527,3669,3670],{"class":536}," example:nestjs\n",[440,3672,3673,3674,3678],{},"Open ",[494,3675,3676],{"href":3676,"rel":3677},"http:\u002F\u002Flocalhost:3000",[498]," 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.",[505,3690,3692],{"id":3691},"next-steps","Next Steps",[440,3694,3695,3696,3699],{},"Deepen your ",[3697,3698,192],"strong",{}," integration:",[469,3701,3702,3707,3712,3717],{},[472,3703,3704,3706],{},[494,3705,46],{"href":47},": Design comprehensive events with context layering",[472,3708,3709,3711],{},[494,3710,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[472,3713,3714,3716],{},[494,3715,61],{"href":62},": Control log volume with head and tail sampling",[472,3718,3719,3721,3722,1917,3724,1921,3726,3728],{},[494,3720,51],{"href":52},": Throw errors with ",[444,3723,1916],{},[444,3725,1920],{},[444,3727,1924],{}," 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}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":523,"searchDepth":654,"depth":654,"links":3734},[3735,3740,3741,3742,3744,3745,3746,3750,3751,3752,3753],{"id":507,"depth":654,"text":25,"children":3736},[3737,3738,3739],{"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":3743},"Background work (log.fork)",{"id":1906,"depth":654,"text":1907},{"id":2611,"depth":654,"text":409},{"id":2624,"depth":654,"text":2625,"children":3747},[3748,3749],{"id":2873,"depth":674,"text":2874},{"id":3149,"depth":674,"text":3150},{"id":3361,"depth":654,"text":3362},{"id":3473,"depth":654,"text":3474},{"id":3627,"depth":654,"text":3628},{"id":3691,"depth":654,"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":192,"icon":195},{"title":192,"description":3754},"GeDNeNMZDvYBB64jtSFRgybYmEnMRQhwLc4BduDtPJQ",[3765,3767],{"title":187,"path":188,"stem":189,"description":3766,"icon":190,"children":-1},"Automatic wide events, structured errors, and logging in TanStack Start API routes and server functions.",{"title":197,"path":198,"stem":199,"description":3768,"icon":200,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Express applications.",1779651720566]