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