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