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