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