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