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