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