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