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