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