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