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