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