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