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