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