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