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