[{"data":1,"prerenderedAt":3866},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nestjs":529,"-integrate-frameworks-nestjs-surround":3861},[4,29,76,122,304,436,495],{"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,432],{"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,"icon":431},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":433,"path":434,"stem":435},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":437,"path":438,"stem":439,"children":440,"page":28},"Extend","\u002Fextend","6.extend",[441,445,450,455,459,464,468,472,476,481,486,491],{"title":128,"path":442,"stem":443,"icon":444},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":446,"path":447,"stem":448,"icon":449},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":451,"path":452,"stem":453,"icon":454},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":456,"path":457,"stem":458,"icon":449},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":460,"path":461,"stem":462,"icon":463},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":465,"stem":466,"icon":467},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":469,"path":470,"stem":471},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":473,"path":474,"stem":475,"icon":431},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"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},"Drain Pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline",{"title":424,"path":496,"stem":497,"children":498,"page":28},"\u002Freference","7.reference",[499,504,507,512,516,521,525],{"title":500,"path":501,"stem":502,"icon":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"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,"icon":520},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":522,"path":523,"stem":524,"icon":431},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":526,"path":527,"stem":528},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":530,"title":251,"body":531,"description":3851,"extension":3852,"links":3853,"meta":3857,"navigation":3858,"path":252,"seo":3859,"stem":253,"__hash__":3860},"docs\u002F4.integrate\u002Fframeworks\u002F06.nestjs.md",{"type":532,"value":533,"toc":3830},"minimark",[534,555,599,603,608,706,710,854,858,1029,1034,1037,1040,1436,1439,1503,1506,1512,1699,1803,1819,1826,1840,2000,2004,2022,2418,2421,2655,2658,2705,2708,2718,2722,2727,2967,2971,2981,3243,3247,3254,3442,3456,3460,3466,3568,3572,3582,3722,3726,3768,3776,3786,3790,3797,3826],[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":254},"[\"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,24],"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,44],{"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,1839],{},[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","After emit"," in Wide events.",[612,1841,1844],{"className":712,"code":1842,"filename":1843,"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,1845,1846,1864,1868,1877,1896,1936,1948,1973,1980,1996],{"__ignoreMap":618},[622,1847,1848,1850,1852,1854,1856,1858,1860,1862],{"class":624,"line":625},[622,1849,723],{"class":722},[622,1851,727],{"class":726},[622,1853,1084],{"class":730},[622,1855,734],{"class":726},[622,1857,737],{"class":722},[622,1859,740],{"class":726},[622,1861,541],{"class":631},[622,1863,746],{"class":726},[622,1865,1866],{"class":624,"line":749},[622,1867,773],{"emptyLinePlaceholder":772},[622,1869,1870,1872,1875],{"class":624,"line":769},[622,1871,779],{"class":726},[622,1873,1874],{"class":782},"Post",[622,1876,1202],{"class":730},[622,1878,1879,1881,1883,1886,1889,1891,1894],{"class":624,"line":776},[622,1880,1003],{"class":782},[622,1882,1158],{"class":730},[622,1884,1885],{"class":782},"Req",[622,1887,1888],{"class":730},"() req: Express",[622,1890,811],{"class":726},[622,1892,1893],{"class":730},"Request) ",[622,1895,789],{"class":726},[622,1897,1898,1901,1903,1906,1908,1911,1914,1916,1918,1921,1923,1925,1928,1931,1934],{"class":624,"line":792},[622,1899,1900],{"class":730},"  req",[622,1902,811],{"class":726},[622,1904,1905],{"class":730},"log",[622,1907,811],{"class":726},[622,1909,1910],{"class":782},"fork",[622,1912,1913],{"class":726},"!",[622,1915,786],{"class":795},[622,1917,968],{"class":726},[622,1919,1920],{"class":631},"enqueue",[622,1922,968],{"class":726},[622,1924,1057],{"class":726},[622,1926,1927],{"class":846}," async",[622,1929,1930],{"class":726}," ()",[622,1932,1933],{"class":846}," =>",[622,1935,1128],{"class":726},[622,1937,1938,1940,1942,1944,1946],{"class":624,"line":805},[622,1939,1191],{"class":846},[622,1941,1194],{"class":730},[622,1943,1197],{"class":726},[622,1945,1084],{"class":782},[622,1947,1202],{"class":795},[622,1949,1950,1952,1954,1956,1958,1960,1963,1965,1969,1971],{"class":624,"line":823},[622,1951,1211],{"class":730},[622,1953,811],{"class":726},[622,1955,1216],{"class":782},[622,1957,786],{"class":795},[622,1959,1221],{"class":726},[622,1961,1962],{"class":795}," queued",[622,1964,799],{"class":726},[622,1966,1968],{"class":1967},"sfNiH"," true",[622,1970,734],{"class":726},[622,1972,837],{"class":795},[622,1974,1975,1978],{"class":624,"line":831},[622,1976,1977],{"class":726},"  }",[622,1979,837],{"class":795},[622,1981,1982,1985,1987,1990,1992,1994],{"class":624,"line":840},[622,1983,1984],{"class":722},"  return",[622,1986,727],{"class":726},[622,1988,1989],{"class":795}," ok",[622,1991,799],{"class":726},[622,1993,1968],{"class":1967},[622,1995,1423],{"class":726},[622,1997,1998],{"class":624,"line":984},[622,1999,1435],{"class":726},[600,2001,2003],{"id":2002},"error-handling","Error Handling",[535,2005,1508,2006,2009,2010,2013,2014,2017,2018,2021],{},[539,2007,2008],{},"createError"," for structured errors with ",[539,2011,2012],{},"why",", ",[539,2015,2016],{},"fix",", and ",[539,2019,2020],{},"link"," fields. Create a NestJS exception filter to log and format errors:",[612,2023,2026],{"className":712,"code":2024,"filename":2025,"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,2027,2028,2047,2074,2093,2111,2115,2124,2140,2168,2193,2236,2240,2247,2265,2275,2281,2286,2290,2307,2337,2353,2369,2385,2401,2408,2413],{"__ignoreMap":618},[622,2029,2030,2032,2034,2037,2039,2041,2043,2045],{"class":624,"line":625},[622,2031,723],{"class":722},[622,2033,727],{"class":726},[622,2035,2036],{"class":730}," Catch",[622,2038,734],{"class":726},[622,2040,737],{"class":722},[622,2042,740],{"class":726},[622,2044,743],{"class":631},[622,2046,746],{"class":726},[622,2048,2049,2051,2054,2056,2059,2061,2064,2066,2068,2070,2072],{"class":624,"line":749},[622,2050,723],{"class":722},[622,2052,2053],{"class":722}," type",[622,2055,727],{"class":726},[622,2057,2058],{"class":730}," ExceptionFilter",[622,2060,1057],{"class":726},[622,2062,2063],{"class":730}," ArgumentsHost",[622,2065,734],{"class":726},[622,2067,737],{"class":722},[622,2069,740],{"class":726},[622,2071,743],{"class":631},[622,2073,746],{"class":726},[622,2075,2076,2078,2080,2083,2085,2087,2089,2091],{"class":624,"line":769},[622,2077,723],{"class":722},[622,2079,727],{"class":726},[622,2081,2082],{"class":730}," parseError",[622,2084,734],{"class":726},[622,2086,737],{"class":722},[622,2088,740],{"class":726},[622,2090,912],{"class":631},[622,2092,746],{"class":726},[622,2094,2095,2097,2099,2101,2103,2105,2107,2109],{"class":624,"line":776},[622,2096,723],{"class":722},[622,2098,727],{"class":726},[622,2100,1084],{"class":730},[622,2102,734],{"class":726},[622,2104,737],{"class":722},[622,2106,740],{"class":726},[622,2108,541],{"class":631},[622,2110,746],{"class":726},[622,2112,2113],{"class":624,"line":792},[622,2114,773],{"emptyLinePlaceholder":772},[622,2116,2117,2119,2122],{"class":624,"line":805},[622,2118,779],{"class":726},[622,2120,2121],{"class":782},"Catch",[622,2123,1202],{"class":730},[622,2125,2126,2128,2130,2133,2136,2138],{"class":624,"line":823},[622,2127,843],{"class":722},[622,2129,847],{"class":846},[622,2131,2132],{"class":628}," EvlogExceptionFilter",[622,2134,2135],{"class":846}," implements",[622,2137,2058],{"class":628},[622,2139,1128],{"class":726},[622,2141,2142,2145,2147,2150,2152,2155,2157,2160,2162,2164,2166],{"class":624,"line":831},[622,2143,2144],{"class":795},"  catch",[622,2146,786],{"class":726},[622,2148,2149],{"class":1176},"exception",[622,2151,799],{"class":726},[622,2153,2154],{"class":628}," unknown",[622,2156,1057],{"class":726},[622,2158,2159],{"class":1176}," host",[622,2161,799],{"class":726},[622,2163,2063],{"class":628},[622,2165,1184],{"class":726},[622,2167,1128],{"class":726},[622,2169,2170,2172,2175,2177,2179,2181,2184,2186,2188,2191],{"class":624,"line":840},[622,2171,1191],{"class":846},[622,2173,2174],{"class":730}," response",[622,2176,1197],{"class":726},[622,2178,2159],{"class":730},[622,2180,811],{"class":726},[622,2182,2183],{"class":782},"switchToHttp",[622,2185,817],{"class":795},[622,2187,811],{"class":726},[622,2189,2190],{"class":782},"getResponse",[622,2192,1202],{"class":795},[622,2194,2195,2197,2200,2202,2205,2208,2211,2214,2216,2219,2222,2224,2226,2229,2231,2233],{"class":624,"line":984},[622,2196,1191],{"class":846},[622,2198,2199],{"class":730}," error",[622,2201,1197],{"class":726},[622,2203,2204],{"class":730}," exception",[622,2206,2207],{"class":726}," instanceof",[622,2209,2210],{"class":628}," Error",[622,2212,2213],{"class":726}," ?",[622,2215,2204],{"class":730},[622,2217,2218],{"class":726}," :",[622,2220,2221],{"class":726}," new",[622,2223,2210],{"class":782},[622,2225,786],{"class":795},[622,2227,2228],{"class":782},"String",[622,2230,786],{"class":795},[622,2232,2149],{"class":730},[622,2234,2235],{"class":795},"))\n",[622,2237,2238],{"class":624,"line":1009},[622,2239,773],{"emptyLinePlaceholder":772},[622,2241,2242,2245],{"class":624,"line":1244},[622,2243,2244],{"class":722},"    try",[622,2246,1128],{"class":726},[622,2248,2249,2252,2254,2256,2259,2261,2263],{"class":624,"line":1269},[622,2250,2251],{"class":782},"      useLogger",[622,2253,817],{"class":795},[622,2255,811],{"class":726},[622,2257,2258],{"class":782},"error",[622,2260,786],{"class":795},[622,2262,2258],{"class":730},[622,2264,837],{"class":795},[622,2266,2267,2270,2273],{"class":624,"line":1320},[622,2268,2269],{"class":726},"    }",[622,2271,2272],{"class":722}," catch",[622,2274,1128],{"class":726},[622,2276,2277],{"class":624,"line":1325},[622,2278,2280],{"class":2279},"sHwdD","      \u002F\u002F Outside an evlog request scope — log is unavailable\n",[622,2282,2283],{"class":624,"line":1350},[622,2284,2285],{"class":726},"    }\n",[622,2287,2288],{"class":624,"line":1404},[622,2289,773],{"emptyLinePlaceholder":772},[622,2291,2292,2294,2297,2299,2301,2303,2305],{"class":624,"line":1409},[622,2293,1191],{"class":846},[622,2295,2296],{"class":730}," parsed",[622,2298,1197],{"class":726},[622,2300,2082],{"class":782},[622,2302,786],{"class":795},[622,2304,2258],{"class":730},[622,2306,837],{"class":795},[622,2308,2309,2312,2314,2317,2319,2322,2324,2326,2328,2330,2333,2335],{"class":624,"line":1426},[622,2310,2311],{"class":730},"    response",[622,2313,811],{"class":726},[622,2315,2316],{"class":782},"status",[622,2318,786],{"class":795},[622,2320,2321],{"class":730},"parsed",[622,2323,811],{"class":726},[622,2325,2316],{"class":730},[622,2327,1184],{"class":795},[622,2329,811],{"class":726},[622,2331,2332],{"class":782},"json",[622,2334,786],{"class":795},[622,2336,789],{"class":726},[622,2338,2339,2342,2344,2346,2348,2351],{"class":624,"line":1432},[622,2340,2341],{"class":795},"      message",[622,2343,799],{"class":726},[622,2345,2296],{"class":730},[622,2347,811],{"class":726},[622,2349,2350],{"class":730},"message",[622,2352,820],{"class":726},[622,2354,2356,2359,2361,2363,2365,2367],{"class":624,"line":2355},21,[622,2357,2358],{"class":795},"      why",[622,2360,799],{"class":726},[622,2362,2296],{"class":730},[622,2364,811],{"class":726},[622,2366,2012],{"class":730},[622,2368,820],{"class":726},[622,2370,2372,2375,2377,2379,2381,2383],{"class":624,"line":2371},22,[622,2373,2374],{"class":795},"      fix",[622,2376,799],{"class":726},[622,2378,2296],{"class":730},[622,2380,811],{"class":726},[622,2382,2016],{"class":730},[622,2384,820],{"class":726},[622,2386,2388,2391,2393,2395,2397,2399],{"class":624,"line":2387},23,[622,2389,2390],{"class":795},"      link",[622,2392,799],{"class":726},[622,2394,2296],{"class":730},[622,2396,811],{"class":726},[622,2398,2020],{"class":730},[622,2400,820],{"class":726},[622,2402,2404,2406],{"class":624,"line":2403},24,[622,2405,2269],{"class":726},[622,2407,837],{"class":795},[622,2409,2411],{"class":624,"line":2410},25,[622,2412,1429],{"class":726},[622,2414,2416],{"class":624,"line":2415},26,[622,2417,1435],{"class":726},[535,2419,2420],{},"Apply it to your controllers:",[612,2422,2425],{"className":712,"code":2423,"filename":2424,"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,2426,2427,2454,2473,2492,2496,2504,2521,2532,2549,2558,2569,2584,2596,2611,2626,2641,2647,2651],{"__ignoreMap":618},[622,2428,2429,2431,2433,2435,2437,2439,2441,2444,2446,2448,2450,2452],{"class":624,"line":625},[622,2430,723],{"class":722},[622,2432,727],{"class":726},[622,2434,1054],{"class":730},[622,2436,1057],{"class":726},[622,2438,1060],{"class":730},[622,2440,1057],{"class":726},[622,2442,2443],{"class":730}," UseFilters",[622,2445,734],{"class":726},[622,2447,737],{"class":722},[622,2449,740],{"class":726},[622,2451,743],{"class":631},[622,2453,746],{"class":726},[622,2455,2456,2458,2460,2463,2465,2467,2469,2471],{"class":624,"line":749},[622,2457,723],{"class":722},[622,2459,727],{"class":726},[622,2461,2462],{"class":730}," createError",[622,2464,734],{"class":726},[622,2466,737],{"class":722},[622,2468,740],{"class":726},[622,2470,912],{"class":631},[622,2472,746],{"class":726},[622,2474,2475,2477,2479,2481,2483,2485,2487,2490],{"class":624,"line":769},[622,2476,723],{"class":722},[622,2478,727],{"class":726},[622,2480,2132],{"class":730},[622,2482,734],{"class":726},[622,2484,737],{"class":722},[622,2486,740],{"class":726},[622,2488,2489],{"class":631},".\u002Fevlog-exception.filter",[622,2491,746],{"class":726},[622,2493,2494],{"class":624,"line":776},[622,2495,773],{"emptyLinePlaceholder":772},[622,2497,2498,2500,2502],{"class":624,"line":792},[622,2499,779],{"class":726},[622,2501,1105],{"class":782},[622,2503,1202],{"class":730},[622,2505,2506,2508,2511,2513,2516,2518],{"class":624,"line":805},[622,2507,779],{"class":726},[622,2509,2510],{"class":782},"UseFilters",[622,2512,786],{"class":730},[622,2514,2515],{"class":726},"new",[622,2517,2132],{"class":782},[622,2519,2520],{"class":730},"())\n",[622,2522,2523,2525,2527,2530],{"class":624,"line":823},[622,2524,843],{"class":722},[622,2526,847],{"class":846},[622,2528,2529],{"class":628}," CheckoutController",[622,2531,1128],{"class":726},[622,2533,2534,2536,2538,2540,2542,2545,2547],{"class":624,"line":831},[622,2535,1133],{"class":726},[622,2537,1136],{"class":782},[622,2539,786],{"class":730},[622,2541,968],{"class":726},[622,2543,2544],{"class":631},"checkout",[622,2546,968],{"class":726},[622,2548,837],{"class":730},[622,2550,2551,2554,2556],{"class":624,"line":840},[622,2552,2553],{"class":795},"  checkout",[622,2555,817],{"class":726},[622,2557,1128],{"class":726},[622,2559,2560,2563,2565,2567],{"class":624,"line":984},[622,2561,2562],{"class":722},"    throw",[622,2564,2462],{"class":782},[622,2566,786],{"class":795},[622,2568,789],{"class":726},[622,2570,2571,2573,2575,2577,2580,2582],{"class":624,"line":1009},[622,2572,2341],{"class":795},[622,2574,799],{"class":726},[622,2576,740],{"class":726},[622,2578,2579],{"class":631},"Payment failed",[622,2581,968],{"class":726},[622,2583,820],{"class":726},[622,2585,2586,2589,2591,2594],{"class":624,"line":1244},[622,2587,2588],{"class":795},"      status",[622,2590,799],{"class":726},[622,2592,2593],{"class":1025}," 402",[622,2595,820],{"class":726},[622,2597,2598,2600,2602,2604,2607,2609],{"class":624,"line":1269},[622,2599,2358],{"class":795},[622,2601,799],{"class":726},[622,2603,740],{"class":726},[622,2605,2606],{"class":631},"Card declined by issuer",[622,2608,968],{"class":726},[622,2610,820],{"class":726},[622,2612,2613,2615,2617,2619,2622,2624],{"class":624,"line":1320},[622,2614,2374],{"class":795},[622,2616,799],{"class":726},[622,2618,740],{"class":726},[622,2620,2621],{"class":631},"Try a different payment method",[622,2623,968],{"class":726},[622,2625,820],{"class":726},[622,2627,2628,2630,2632,2634,2637,2639],{"class":624,"line":1325},[622,2629,2390],{"class":795},[622,2631,799],{"class":726},[622,2633,740],{"class":726},[622,2635,2636],{"class":631},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[622,2638,968],{"class":726},[622,2640,820],{"class":726},[622,2642,2643,2645],{"class":624,"line":1350},[622,2644,2269],{"class":726},[622,2646,837],{"class":795},[622,2648,2649],{"class":624,"line":1404},[622,2650,1429],{"class":726},[622,2652,2653],{"class":624,"line":1409},[622,2654,1435],{"class":726},[535,2656,2657],{},"The error is captured and logged with both the custom context and structured error fields:",[612,2659,2661],{"className":614,"code":2660,"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,2662,2663,2674,2696],{"__ignoreMap":618},[622,2664,2665,2668,2671],{"class":624,"line":625},[622,2666,2667],{"class":628},"14:58:20",[622,2669,2670],{"class":631}," ERROR",[622,2672,2673],{"class":730}," [my-api] GET \u002Fcheckout 402 in 3ms\n",[622,2675,2676,2678,2681,2684,2687,2690,2693],{"class":624,"line":749},[622,2677,1460],{"class":628},[622,2679,2680],{"class":631}," error:",[622,2682,2683],{"class":631}," name=EvlogError",[622,2685,2686],{"class":631}," message=Payment",[622,2688,2689],{"class":631}," failed",[622,2691,2692],{"class":631}," status=",[622,2694,2695],{"class":1025},"402\n",[622,2697,2698,2700,2702],{"class":624,"line":769},[622,2699,1496],{"class":628},[622,2701,1499],{"class":631},[622,2703,2704],{"class":631}," 880a50ac-...\n",[600,2706,500],{"id":2707},"configuration",[535,2709,2710,2711,2714,2715,2717],{},"See the ",[589,2712,2713],{"href":501},"Configuration reference"," for all available options (",[539,2716,942],{},", middleware options, sampling, silent mode, etc.).",[600,2719,2721],{"id":2720},"drain-enrichers","Drain & Enrichers",[535,2723,2724,2725,799],{},"Configure drain adapters and enrichers in ",[539,2726,545],{},[612,2728,2730],{"className":712,"code":2729,"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,2731,2732,2750,2768,2788,2808,2812,2825,2829,2839,2847,2859,2872,2891,2902,2932,2937,2945,2951,2957],{"__ignoreMap":618},[622,2733,2734,2736,2738,2740,2742,2744,2746,2748],{"class":624,"line":625},[622,2735,723],{"class":722},[622,2737,727],{"class":726},[622,2739,731],{"class":730},[622,2741,734],{"class":726},[622,2743,737],{"class":722},[622,2745,740],{"class":726},[622,2747,743],{"class":631},[622,2749,746],{"class":726},[622,2751,2752,2754,2756,2758,2760,2762,2764,2766],{"class":624,"line":749},[622,2753,723],{"class":722},[622,2755,727],{"class":726},[622,2757,756],{"class":730},[622,2759,734],{"class":726},[622,2761,737],{"class":722},[622,2763,740],{"class":726},[622,2765,541],{"class":631},[622,2767,746],{"class":726},[622,2769,2770,2772,2774,2777,2779,2781,2783,2786],{"class":624,"line":769},[622,2771,723],{"class":722},[622,2773,727],{"class":726},[622,2775,2776],{"class":730}," createAxiomDrain",[622,2778,734],{"class":726},[622,2780,737],{"class":722},[622,2782,740],{"class":726},[622,2784,2785],{"class":631},"evlog\u002Faxiom",[622,2787,746],{"class":726},[622,2789,2790,2792,2794,2797,2799,2801,2803,2806],{"class":624,"line":776},[622,2791,723],{"class":722},[622,2793,727],{"class":726},[622,2795,2796],{"class":730}," createUserAgentEnricher",[622,2798,734],{"class":726},[622,2800,737],{"class":722},[622,2802,740],{"class":726},[622,2804,2805],{"class":631},"evlog\u002Fenrichers",[622,2807,746],{"class":726},[622,2809,2810],{"class":624,"line":792},[622,2811,773],{"emptyLinePlaceholder":772},[622,2813,2814,2816,2819,2821,2823],{"class":624,"line":805},[622,2815,987],{"class":846},[622,2817,2818],{"class":730}," userAgent ",[622,2820,993],{"class":726},[622,2822,2796],{"class":782},[622,2824,1202],{"class":730},[622,2826,2827],{"class":624,"line":823},[622,2828,773],{"emptyLinePlaceholder":772},[622,2830,2831,2833,2835,2837],{"class":624,"line":831},[622,2832,779],{"class":726},[622,2834,783],{"class":782},[622,2836,786],{"class":730},[622,2838,789],{"class":726},[622,2840,2841,2843,2845],{"class":624,"line":840},[622,2842,796],{"class":795},[622,2844,799],{"class":726},[622,2846,802],{"class":730},[622,2848,2849,2851,2853,2855,2857],{"class":624,"line":984},[622,2850,808],{"class":730},[622,2852,811],{"class":726},[622,2854,814],{"class":782},[622,2856,786],{"class":730},[622,2858,789],{"class":726},[622,2860,2861,2864,2866,2868,2870],{"class":624,"line":1009},[622,2862,2863],{"class":795},"      drain",[622,2865,799],{"class":726},[622,2867,2776],{"class":782},[622,2869,817],{"class":730},[622,2871,820],{"class":726},[622,2873,2874,2877,2879,2882,2885,2887,2889],{"class":624,"line":1244},[622,2875,2876],{"class":782},"      enrich",[622,2878,799],{"class":726},[622,2880,2881],{"class":726}," (",[622,2883,2884],{"class":1176},"ctx",[622,2886,1184],{"class":726},[622,2888,1933],{"class":846},[622,2890,1128],{"class":726},[622,2892,2893,2896,2898,2900],{"class":624,"line":1269},[622,2894,2895],{"class":782},"        userAgent",[622,2897,786],{"class":795},[622,2899,2884],{"class":730},[622,2901,837],{"class":795},[622,2903,2904,2907,2909,2912,2914,2917,2919,2922,2924,2927,2929],{"class":624,"line":1320},[622,2905,2906],{"class":730},"        ctx",[622,2908,811],{"class":726},[622,2910,2911],{"class":730},"event",[622,2913,811],{"class":726},[622,2915,2916],{"class":730},"region",[622,2918,1197],{"class":726},[622,2920,2921],{"class":730}," process",[622,2923,811],{"class":726},[622,2925,2926],{"class":730},"env",[622,2928,811],{"class":726},[622,2930,2931],{"class":730},"FLY_REGION\n",[622,2933,2934],{"class":624,"line":1325},[622,2935,2936],{"class":726},"      },\n",[622,2938,2939,2941,2943],{"class":624,"line":1350},[622,2940,2269],{"class":726},[622,2942,1184],{"class":730},[622,2944,820],{"class":726},[622,2946,2947,2949],{"class":624,"line":1404},[622,2948,826],{"class":730},[622,2950,820],{"class":726},[622,2952,2953,2955],{"class":624,"line":1409},[622,2954,834],{"class":726},[622,2956,837],{"class":730},[622,2958,2959,2961,2963,2965],{"class":624,"line":1426},[622,2960,843],{"class":722},[622,2962,847],{"class":846},[622,2964,850],{"class":628},[622,2966,853],{"class":726},[604,2968,2970],{"id":2969},"async-configuration","Async Configuration",[535,2972,1508,2973,2976,2977,2980],{},[539,2974,2975],{},"forRootAsync()"," when options depend on other providers (e.g. ",[539,2978,2979],{},"ConfigService","):",[612,2982,2984],{"className":712,"code":2983,"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,2985,2986,3004,3029,3047,3065,3069,3079,3087,3100,3113,3125,3137,3161,3204,3213,3221,3227,3233],{"__ignoreMap":618},[622,2987,2988,2990,2992,2994,2996,2998,3000,3002],{"class":624,"line":625},[622,2989,723],{"class":722},[622,2991,727],{"class":726},[622,2993,731],{"class":730},[622,2995,734],{"class":726},[622,2997,737],{"class":722},[622,2999,740],{"class":726},[622,3001,743],{"class":631},[622,3003,746],{"class":726},[622,3005,3006,3008,3010,3013,3015,3018,3020,3022,3024,3027],{"class":624,"line":749},[622,3007,723],{"class":722},[622,3009,727],{"class":726},[622,3011,3012],{"class":730}," ConfigModule",[622,3014,1057],{"class":726},[622,3016,3017],{"class":730}," ConfigService",[622,3019,734],{"class":726},[622,3021,737],{"class":722},[622,3023,740],{"class":726},[622,3025,3026],{"class":631},"@nestjs\u002Fconfig",[622,3028,746],{"class":726},[622,3030,3031,3033,3035,3037,3039,3041,3043,3045],{"class":624,"line":769},[622,3032,723],{"class":722},[622,3034,727],{"class":726},[622,3036,756],{"class":730},[622,3038,734],{"class":726},[622,3040,737],{"class":722},[622,3042,740],{"class":726},[622,3044,541],{"class":631},[622,3046,746],{"class":726},[622,3048,3049,3051,3053,3055,3057,3059,3061,3063],{"class":624,"line":776},[622,3050,723],{"class":722},[622,3052,727],{"class":726},[622,3054,2776],{"class":730},[622,3056,734],{"class":726},[622,3058,737],{"class":722},[622,3060,740],{"class":726},[622,3062,2785],{"class":631},[622,3064,746],{"class":726},[622,3066,3067],{"class":624,"line":792},[622,3068,773],{"emptyLinePlaceholder":772},[622,3070,3071,3073,3075,3077],{"class":624,"line":805},[622,3072,779],{"class":726},[622,3074,783],{"class":782},[622,3076,786],{"class":730},[622,3078,789],{"class":726},[622,3080,3081,3083,3085],{"class":624,"line":823},[622,3082,796],{"class":795},[622,3084,799],{"class":726},[622,3086,802],{"class":730},[622,3088,3089,3092,3094,3096,3098],{"class":624,"line":831},[622,3090,3091],{"class":730},"    ConfigModule",[622,3093,811],{"class":726},[622,3095,814],{"class":782},[622,3097,817],{"class":730},[622,3099,820],{"class":726},[622,3101,3102,3104,3106,3109,3111],{"class":624,"line":840},[622,3103,808],{"class":730},[622,3105,811],{"class":726},[622,3107,3108],{"class":782},"forRootAsync",[622,3110,786],{"class":730},[622,3112,789],{"class":726},[622,3114,3115,3118,3120,3123],{"class":624,"line":984},[622,3116,3117],{"class":795},"      imports",[622,3119,799],{"class":726},[622,3121,3122],{"class":730}," [ConfigModule]",[622,3124,820],{"class":726},[622,3126,3127,3130,3132,3135],{"class":624,"line":1009},[622,3128,3129],{"class":795},"      inject",[622,3131,799],{"class":726},[622,3133,3134],{"class":730}," [ConfigService]",[622,3136,820],{"class":726},[622,3138,3139,3142,3144,3146,3149,3151,3153,3155,3157,3159],{"class":624,"line":1244},[622,3140,3141],{"class":782},"      useFactory",[622,3143,799],{"class":726},[622,3145,2881],{"class":726},[622,3147,3148],{"class":1176},"config",[622,3150,799],{"class":726},[622,3152,3017],{"class":628},[622,3154,1184],{"class":726},[622,3156,1933],{"class":846},[622,3158,2881],{"class":730},[622,3160,789],{"class":726},[622,3162,3163,3166,3168,3170,3172,3174,3177,3179,3182,3184,3187,3189,3191,3194,3196,3198,3200,3202],{"class":624,"line":1269},[622,3164,3165],{"class":795},"        drain",[622,3167,799],{"class":726},[622,3169,2776],{"class":782},[622,3171,786],{"class":730},[622,3173,1221],{"class":726},[622,3175,3176],{"class":795}," apiKey",[622,3178,799],{"class":726},[622,3180,3181],{"class":730}," config",[622,3183,811],{"class":726},[622,3185,3186],{"class":782},"get",[622,3188,786],{"class":730},[622,3190,968],{"class":726},[622,3192,3193],{"class":631},"AXIOM_API_KEY",[622,3195,968],{"class":726},[622,3197,1173],{"class":730},[622,3199,834],{"class":726},[622,3201,1184],{"class":730},[622,3203,820],{"class":726},[622,3205,3206,3209,3211],{"class":624,"line":1320},[622,3207,3208],{"class":726},"      }",[622,3210,1184],{"class":730},[622,3212,820],{"class":726},[622,3214,3215,3217,3219],{"class":624,"line":1325},[622,3216,2269],{"class":726},[622,3218,1184],{"class":730},[622,3220,820],{"class":726},[622,3222,3223,3225],{"class":624,"line":1350},[622,3224,826],{"class":730},[622,3226,820],{"class":726},[622,3228,3229,3231],{"class":624,"line":1404},[622,3230,834],{"class":726},[622,3232,837],{"class":730},[622,3234,3235,3237,3239,3241],{"class":624,"line":1409},[622,3236,843],{"class":722},[622,3238,847],{"class":846},[622,3240,850],{"class":628},[622,3242,853],{"class":726},[604,3244,3246],{"id":3245},"pipeline-batching-retry","Pipeline (Batching & Retry)",[535,3248,3249,3250,3253],{},"For production, wrap your adapter with ",[539,3251,3252],{},"createDrainPipeline"," to batch events and retry on failure:",[612,3255,3257],{"className":712,"code":3256,"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,3258,3259,3280,3298,3318,3322,3346,3375,3394,3400,3419,3423],{"__ignoreMap":618},[622,3260,3261,3263,3265,3267,3270,3272,3274,3276,3278],{"class":624,"line":625},[622,3262,723],{"class":722},[622,3264,2053],{"class":722},[622,3266,727],{"class":726},[622,3268,3269],{"class":730}," DrainContext",[622,3271,734],{"class":726},[622,3273,737],{"class":722},[622,3275,740],{"class":726},[622,3277,912],{"class":631},[622,3279,746],{"class":726},[622,3281,3282,3284,3286,3288,3290,3292,3294,3296],{"class":624,"line":749},[622,3283,723],{"class":722},[622,3285,727],{"class":726},[622,3287,2776],{"class":730},[622,3289,734],{"class":726},[622,3291,737],{"class":722},[622,3293,740],{"class":726},[622,3295,2785],{"class":631},[622,3297,746],{"class":726},[622,3299,3300,3302,3304,3307,3309,3311,3313,3316],{"class":624,"line":769},[622,3301,723],{"class":722},[622,3303,727],{"class":726},[622,3305,3306],{"class":730}," createDrainPipeline",[622,3308,734],{"class":726},[622,3310,737],{"class":722},[622,3312,740],{"class":726},[622,3314,3315],{"class":631},"evlog\u002Fpipeline",[622,3317,746],{"class":726},[622,3319,3320],{"class":624,"line":776},[622,3321,773],{"emptyLinePlaceholder":772},[622,3323,3324,3326,3329,3331,3333,3336,3339,3342,3344],{"class":624,"line":792},[622,3325,987],{"class":846},[622,3327,3328],{"class":730}," pipeline ",[622,3330,993],{"class":726},[622,3332,3306],{"class":782},[622,3334,3335],{"class":726},"\u003C",[622,3337,3338],{"class":628},"DrainContext",[622,3340,3341],{"class":726},">",[622,3343,786],{"class":730},[622,3345,789],{"class":726},[622,3347,3348,3351,3353,3355,3358,3360,3363,3365,3368,3370,3373],{"class":624,"line":805},[622,3349,3350],{"class":795},"  batch",[622,3352,799],{"class":726},[622,3354,727],{"class":726},[622,3356,3357],{"class":795}," size",[622,3359,799],{"class":726},[622,3361,3362],{"class":1025}," 50",[622,3364,1057],{"class":726},[622,3366,3367],{"class":795}," intervalMs",[622,3369,799],{"class":726},[622,3371,3372],{"class":1025}," 5000",[622,3374,971],{"class":726},[622,3376,3377,3380,3382,3384,3387,3389,3392],{"class":624,"line":823},[622,3378,3379],{"class":795},"  retry",[622,3381,799],{"class":726},[622,3383,727],{"class":726},[622,3385,3386],{"class":795}," maxAttempts",[622,3388,799],{"class":726},[622,3390,3391],{"class":1025}," 3",[622,3393,971],{"class":726},[622,3395,3396,3398],{"class":624,"line":831},[622,3397,834],{"class":726},[622,3399,837],{"class":730},[622,3401,3402,3404,3407,3409,3412,3414,3417],{"class":624,"line":840},[622,3403,987],{"class":846},[622,3405,3406],{"class":730}," drain ",[622,3408,993],{"class":726},[622,3410,3411],{"class":782}," pipeline",[622,3413,786],{"class":730},[622,3415,3416],{"class":782},"createAxiomDrain",[622,3418,2520],{"class":730},[622,3420,3421],{"class":624,"line":984},[622,3422,773],{"emptyLinePlaceholder":772},[622,3424,3425,3428,3430,3432,3434,3436,3438,3440],{"class":624,"line":1009},[622,3426,3427],{"class":730},"EvlogModule",[622,3429,811],{"class":726},[622,3431,814],{"class":782},[622,3433,786],{"class":730},[622,3435,1221],{"class":726},[622,3437,3406],{"class":730},[622,3439,834],{"class":726},[622,3441,837],{"class":730},[3443,3444,3447,3448,3451,3452,3455],"callout",{"color":3445,"icon":3446},"info","i-lucide-info","Call ",[539,3449,3450],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[589,3453,3454],{"href":493},"Pipeline docs"," for all options.",[600,3457,3459],{"id":3458},"tail-sampling","Tail Sampling",[535,3461,1508,3462,3465],{},[539,3463,3464],{},"keep"," to force-retain specific events regardless of head sampling:",[612,3467,3469],{"className":712,"code":3468,"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,3470,3471,3483,3496,3513,3557,3562],{"__ignoreMap":618},[622,3472,3473,3475,3477,3479,3481],{"class":624,"line":625},[622,3474,3427],{"class":730},[622,3476,811],{"class":726},[622,3478,814],{"class":782},[622,3480,786],{"class":730},[622,3482,789],{"class":726},[622,3484,3485,3488,3490,3492,3494],{"class":624,"line":749},[622,3486,3487],{"class":795},"  drain",[622,3489,799],{"class":726},[622,3491,2776],{"class":782},[622,3493,817],{"class":730},[622,3495,820],{"class":726},[622,3497,3498,3501,3503,3505,3507,3509,3511],{"class":624,"line":769},[622,3499,3500],{"class":782},"  keep",[622,3502,799],{"class":726},[622,3504,2881],{"class":726},[622,3506,2884],{"class":1176},[622,3508,1184],{"class":726},[622,3510,1933],{"class":846},[622,3512,1128],{"class":726},[622,3514,3515,3518,3520,3522,3524,3527,3530,3533,3535,3537,3540,3543,3545,3547,3549,3552,3554],{"class":624,"line":776},[622,3516,3517],{"class":722},"    if",[622,3519,2881],{"class":795},[622,3521,2884],{"class":730},[622,3523,811],{"class":726},[622,3525,3526],{"class":730},"duration",[622,3528,3529],{"class":726}," &&",[622,3531,3532],{"class":730}," ctx",[622,3534,811],{"class":726},[622,3536,3526],{"class":730},[622,3538,3539],{"class":726}," >",[622,3541,3542],{"class":1025}," 2000",[622,3544,1173],{"class":795},[622,3546,2884],{"class":730},[622,3548,811],{"class":726},[622,3550,3551],{"class":730},"shouldKeep",[622,3553,1197],{"class":726},[622,3555,3556],{"class":1967}," true\n",[622,3558,3559],{"class":624,"line":792},[622,3560,3561],{"class":726},"  },\n",[622,3563,3564,3566],{"class":624,"line":805},[622,3565,834],{"class":726},[622,3567,837],{"class":730},[600,3569,3571],{"id":3570},"route-filtering","Route Filtering",[535,3573,3574,3575,1808,3578,3581],{},"Control which routes are logged with ",[539,3576,3577],{},"include",[539,3579,3580],{},"exclude"," patterns:",[612,3583,3585],{"className":712,"code":3584,"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,3586,3587,3599,3621,3650,3659,3686,3712,3716],{"__ignoreMap":618},[622,3588,3589,3591,3593,3595,3597],{"class":624,"line":625},[622,3590,3427],{"class":730},[622,3592,811],{"class":726},[622,3594,814],{"class":782},[622,3596,786],{"class":730},[622,3598,789],{"class":726},[622,3600,3601,3604,3606,3609,3611,3614,3616,3619],{"class":624,"line":749},[622,3602,3603],{"class":795},"  include",[622,3605,799],{"class":726},[622,3607,3608],{"class":730}," [",[622,3610,968],{"class":726},[622,3612,3613],{"class":631},"\u002Fapi\u002F**",[622,3615,968],{"class":726},[622,3617,3618],{"class":730},"]",[622,3620,820],{"class":726},[622,3622,3623,3626,3628,3630,3632,3635,3637,3639,3641,3644,3646,3648],{"class":624,"line":769},[622,3624,3625],{"class":795},"  exclude",[622,3627,799],{"class":726},[622,3629,3608],{"class":730},[622,3631,968],{"class":726},[622,3633,3634],{"class":631},"\u002F_internal\u002F**",[622,3636,968],{"class":726},[622,3638,1057],{"class":726},[622,3640,740],{"class":726},[622,3642,3643],{"class":631},"\u002Fhealth",[622,3645,968],{"class":726},[622,3647,3618],{"class":730},[622,3649,820],{"class":726},[622,3651,3652,3655,3657],{"class":624,"line":776},[622,3653,3654],{"class":795},"  routes",[622,3656,799],{"class":726},[622,3658,1128],{"class":726},[622,3660,3661,3664,3667,3669,3671,3673,3675,3677,3679,3682,3684],{"class":624,"line":792},[622,3662,3663],{"class":726},"    '",[622,3665,3666],{"class":795},"\u002Fapi\u002Fauth\u002F**",[622,3668,968],{"class":726},[622,3670,799],{"class":726},[622,3672,727],{"class":726},[622,3674,958],{"class":795},[622,3676,799],{"class":726},[622,3678,740],{"class":726},[622,3680,3681],{"class":631},"auth-service",[622,3683,968],{"class":726},[622,3685,971],{"class":726},[622,3687,3688,3690,3693,3695,3697,3699,3701,3703,3705,3708,3710],{"class":624,"line":805},[622,3689,3663],{"class":726},[622,3691,3692],{"class":795},"\u002Fapi\u002Fpayment\u002F**",[622,3694,968],{"class":726},[622,3696,799],{"class":726},[622,3698,727],{"class":726},[622,3700,958],{"class":795},[622,3702,799],{"class":726},[622,3704,740],{"class":726},[622,3706,3707],{"class":631},"payment-service",[622,3709,968],{"class":726},[622,3711,971],{"class":726},[622,3713,3714],{"class":624,"line":823},[622,3715,3561],{"class":726},[622,3717,3718,3720],{"class":624,"line":831},[622,3719,834],{"class":726},[622,3721,837],{"class":730},[600,3723,3725],{"id":3724},"run-locally","Run Locally",[612,3727,3730],{"className":614,"code":3728,"filename":3729,"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,3731,3732,3743,3751,3758],{"__ignoreMap":618},[622,3733,3734,3737,3740],{"class":624,"line":625},[622,3735,3736],{"class":628},"git",[622,3738,3739],{"class":631}," clone",[622,3741,3742],{"class":631}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[622,3744,3745,3748],{"class":624,"line":749},[622,3746,3747],{"class":782},"cd",[622,3749,3750],{"class":631}," evlog\n",[622,3752,3753,3755],{"class":624,"line":769},[622,3754,616],{"class":628},[622,3756,3757],{"class":631}," install\n",[622,3759,3760,3762,3765],{"class":624,"line":776},[622,3761,616],{"class":628},[622,3763,3764],{"class":631}," example",[622,3766,3767],{"class":631}," nestjs\n",[535,3769,3770,3771,3775],{},"Open ",[589,3772,3773],{"href":3773,"rel":3774},"http:\u002F\u002Flocalhost:3000",[593]," to explore the interactive test UI.",[3777,3778,3779],"card-group",{},[3780,3781,3785],"card",{"icon":3782,"title":3783,"to":3784},"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,3787,3789],{"id":3788},"next-steps","Next Steps",[535,3791,3792,3793,3796],{},"Deepen your ",[3794,3795,251],"strong",{}," integration:",[564,3798,3799,3804,3809,3814],{},[567,3800,3801,3803],{},[589,3802,44],{"href":45},": Design comprehensive events with context layering",[567,3805,3806,3808],{},[589,3807,133],{"href":138},": Send logs to Axiom, Sentry, PostHog, and more",[567,3810,3811,3813],{},[589,3812,59],{"href":60},": Control log volume with head and tail sampling",[567,3815,3816,3818,3819,2013,3821,2017,3823,3825],{},[589,3817,49],{"href":50},": Throw errors with ",[539,3820,2012],{},[539,3822,2016],{},[539,3824,2020],{}," fields",[3827,3828,3829],"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":3831},[3832,3837,3838,3839,3841,3842,3843,3847,3848,3849,3850],{"id":602,"depth":749,"text":24,"children":3833},[3834,3835,3836],{"id":606,"depth":769,"text":607},{"id":708,"depth":769,"text":709},{"id":856,"depth":769,"text":857},{"id":1036,"depth":749,"text":44},{"id":1505,"depth":749,"text":549},{"id":1821,"depth":749,"text":3840},"Background work (log.fork)",{"id":2002,"depth":749,"text":2003},{"id":2707,"depth":749,"text":500},{"id":2720,"depth":749,"text":2721,"children":3844},[3845,3846],{"id":2969,"depth":769,"text":2970},{"id":3245,"depth":769,"text":3246},{"id":3458,"depth":749,"text":3459},{"id":3570,"depth":749,"text":3571},{"id":3724,"depth":749,"text":3725},{"id":3788,"depth":749,"text":3789},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in NestJS applications.","md",[3854],{"label":3783,"icon":3782,"to":3784,"color":3855,"variant":3856},"neutral","subtle",{},{"title":251,"icon":254},{"title":251,"description":3851},"z1U7d0IxIS19ff3mLw7v59jFpexM8lixb-rl4CUygZQ",[3862,3864],{"title":246,"path":247,"stem":248,"description":3863,"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":3865,"icon":259,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Express applications.",1786799456232]