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