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