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