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