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