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