[{"data":1,"prerenderedAt":1805},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-astro":219,"-frameworks-astro-surround":1800},[4,30,105,139,188,205],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","/frameworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100],{"title":36,"path":37,"stem":38,"icon":39},"Overview","/frameworks/overview","2.frameworks/00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","/frameworks/nuxt","2.frameworks/01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","/frameworks/nextjs","2.frameworks/02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","/frameworks/sveltekit","2.frameworks/03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","/frameworks/nitro","2.frameworks/04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","/frameworks/tanstack-start","2.frameworks/05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","/frameworks/nestjs","2.frameworks/06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","/frameworks/express","2.frameworks/07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","/frameworks/hono","2.frameworks/08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","/frameworks/fastify","2.frameworks/09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","/frameworks/elysia","2.frameworks/10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","/frameworks/cloudflare-workers","2.frameworks/11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","/frameworks/standalone","2.frameworks/12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","/frameworks/astro","2.frameworks/13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Core Concepts","/core-concepts","3.core-concepts",[110,115,120,125,129,134],{"title":111,"path":112,"stem":113,"icon":114},"Wide Events","/core-concepts/wide-events","3.core-concepts/1.wide-events","i-lucide-layers",{"title":116,"path":117,"stem":118,"icon":119},"Structured Errors","/core-concepts/structured-errors","3.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":121,"path":122,"stem":123,"icon":124},"Best Practices","/core-concepts/best-practices","3.core-concepts/3.best-practices","i-lucide-shield-check",{"title":126,"path":127,"stem":128,"icon":99},"Typed Fields","/core-concepts/typed-fields","3.core-concepts/4.typed-fields",{"title":130,"path":131,"stem":132,"icon":133},"Sampling","/core-concepts/sampling","3.core-concepts/5.sampling","i-lucide-filter",{"title":135,"path":136,"stem":137,"icon":138},"Client Logging","/core-concepts/client-logging","3.core-concepts/6.client-logging","i-lucide-monitor",{"title":140,"path":141,"stem":142,"children":143,"page":29},"Adapters","/adapters","4.adapters",[144,148,153,158,163,168,173,178,183],{"title":36,"path":145,"stem":146,"icon":147},"/adapters/overview","4.adapters/1.overview","i-custom-plug",{"title":149,"path":150,"stem":151,"icon":152},"Axiom","/adapters/axiom","4.adapters/2.axiom","i-custom-axiom",{"title":154,"path":155,"stem":156,"icon":157},"OTLP","/adapters/otlp","4.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":159,"path":160,"stem":161,"icon":162},"PostHog","/adapters/posthog","4.adapters/4.posthog","i-simple-icons-posthog",{"title":164,"path":165,"stem":166,"icon":167},"Sentry","/adapters/sentry","4.adapters/5.sentry","i-simple-icons-sentry",{"title":169,"path":170,"stem":171,"icon":172},"Better Stack","/adapters/better-stack","4.adapters/6.better-stack","i-simple-icons-betterstack",{"title":174,"path":175,"stem":176,"icon":177},"Custom Adapters","/adapters/custom","4.adapters/7.custom","i-lucide-code",{"title":179,"path":180,"stem":181,"icon":182},"Pipeline","/adapters/pipeline","4.adapters/8.pipeline","i-lucide-workflow",{"title":184,"path":185,"stem":186,"icon":187},"Browser","/adapters/browser","4.adapters/9.browser","i-lucide-globe",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Enrichers","/enrichers","5.enrichers",[193,196,201],{"title":36,"path":194,"stem":195,"icon":28},"/enrichers/overview","5.enrichers/1.overview",{"title":197,"path":198,"stem":199,"icon":200},"Built-in","/enrichers/built-in","5.enrichers/2.built-in","i-lucide-puzzle",{"title":202,"path":203,"stem":204,"icon":177},"Custom","/enrichers/custom","5.enrichers/3.custom",{"title":206,"path":207,"stem":208,"children":209,"page":29},"NuxtHub","/nuxthub","6.nuxthub",[210,214],{"title":36,"path":211,"stem":212,"icon":213},"/nuxthub/overview","6.nuxthub/1.overview","i-lucide-database",{"title":215,"path":216,"stem":217,"icon":218},"Retention","/nuxthub/retention","6.nuxthub/2.retention","i-lucide-clock",{"id":220,"title":101,"body":221,"description":1793,"extension":1794,"links":1795,"meta":1796,"navigation":1797,"path":102,"seo":1798,"stem":103,"__hash__":1799},"docs/2.frameworks/13.astro.md",{"type":222,"value":223,"toc":1783},"minimark",[224,233,242,246,251,276,280,721,725,833,836,843,1111,1156,1160,1167,1546,1550,1556,1772,1779],[225,226,227,228,232],"p",{},"Astro doesn't have a dedicated evlog integration. Instead, use the core ",[229,230,231],"code",{},"evlog"," package with Astro's middleware to create request-scoped loggers manually.",[234,235,237,238,241],"callout",{"color":236,"icon":13},"info","This is a guide-level integration. It uses the generic ",[229,239,240],{},"createRequestLogger"," API rather than a framework-specific module.",[243,244,20],"h2",{"id":245},"quick-start",[247,248,250],"h3",{"id":249},"_1-install","1. Install",[252,253,258],"pre",{"className":254,"code":255,"language":256,"meta":257,"style":257},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","bash","",[229,259,260],{"__ignoreMap":257},[261,262,265,269,273],"span",{"class":263,"line":264},"line",1,[261,266,268],{"class":267},"sBMFI","bun",[261,270,272],{"class":271},"sfazB"," add",[261,274,275],{"class":271}," evlog\n",[247,277,279],{"id":278},"_2-create-a-middleware","2. Create a middleware",[252,281,286],{"className":282,"code":283,"filename":284,"language":285,"meta":257,"style":257},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMiddleware } from 'astro:middleware'\nimport { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-astro-app' },\n})\n\nexport const onRequest = defineMiddleware(async ({ request, locals }, next) => {\n  const url = new URL(request.url)\n\n  const log = createRequestLogger({\n    method: request.method,\n    path: url.pathname,\n  })\n\n  locals.log = log\n\n  try {\n    const response = await next()\n    log.emit()\n    return response\n  } catch (error) {\n    log.error(error instanceof Error ? error : new Error(String(error)))\n    log.emit()\n    throw error\n  }\n})\n","src/middleware.ts","typescript",[229,287,288,317,343,350,363,391,400,405,455,486,491,507,525,542,550,555,571,576,584,603,616,625,644,688,699,708,714],{"__ignoreMap":257},[261,289,290,294,298,302,305,308,311,314],{"class":263,"line":264},[261,291,293],{"class":292},"s7zQu","import",[261,295,297],{"class":296},"sMK4o"," {",[261,299,301],{"class":300},"sTEyZ"," defineMiddleware",[261,303,304],{"class":296}," }",[261,306,307],{"class":292}," from",[261,309,310],{"class":296}," '",[261,312,313],{"class":271},"astro:middleware",[261,315,316],{"class":296},"'\n",[261,318,320,322,324,327,330,333,335,337,339,341],{"class":263,"line":319},2,[261,321,293],{"class":292},[261,323,297],{"class":296},[261,325,326],{"class":300}," initLogger",[261,328,329],{"class":296},",",[261,331,332],{"class":300}," createRequestLogger",[261,334,304],{"class":296},[261,336,307],{"class":292},[261,338,310],{"class":296},[261,340,231],{"class":271},[261,342,316],{"class":296},[261,344,346],{"class":263,"line":345},3,[261,347,349],{"emptyLinePlaceholder":348},true,"\n",[261,351,353,357,360],{"class":263,"line":352},4,[261,354,356],{"class":355},"s2Zo4","initLogger",[261,358,359],{"class":300},"(",[261,361,362],{"class":296},"{\n",[261,364,366,370,373,375,378,380,382,385,388],{"class":263,"line":365},5,[261,367,369],{"class":368},"swJcz","  env",[261,371,372],{"class":296},":",[261,374,297],{"class":296},[261,376,377],{"class":368}," service",[261,379,372],{"class":296},[261,381,310],{"class":296},[261,383,384],{"class":271},"my-astro-app",[261,386,387],{"class":296},"'",[261,389,390],{"class":296}," },\n",[261,392,394,397],{"class":263,"line":393},6,[261,395,396],{"class":296},"}",[261,398,399],{"class":300},")\n",[261,401,403],{"class":263,"line":402},7,[261,404,349],{"emptyLinePlaceholder":348},[261,406,408,411,415,418,421,423,425,428,431,435,437,440,443,446,449,452],{"class":263,"line":407},8,[261,409,410],{"class":292},"export",[261,412,414],{"class":413},"spNyl"," const",[261,416,417],{"class":300}," onRequest ",[261,419,420],{"class":296},"=",[261,422,301],{"class":355},[261,424,359],{"class":300},[261,426,427],{"class":413},"async",[261,429,430],{"class":296}," ({",[261,432,434],{"class":433},"sHdIc"," request",[261,436,329],{"class":296},[261,438,439],{"class":433}," locals",[261,441,442],{"class":296}," },",[261,444,445],{"class":433}," next",[261,447,448],{"class":296},")",[261,450,451],{"class":413}," =>",[261,453,454],{"class":296}," {\n",[261,456,458,461,464,467,470,473,475,478,481,484],{"class":263,"line":457},9,[261,459,460],{"class":413},"  const",[261,462,463],{"class":300}," url",[261,465,466],{"class":296}," =",[261,468,469],{"class":296}," new",[261,471,472],{"class":355}," URL",[261,474,359],{"class":368},[261,476,477],{"class":300},"request",[261,479,480],{"class":296},".",[261,482,483],{"class":300},"url",[261,485,399],{"class":368},[261,487,489],{"class":263,"line":488},10,[261,490,349],{"emptyLinePlaceholder":348},[261,492,494,496,499,501,503,505],{"class":263,"line":493},11,[261,495,460],{"class":413},[261,497,498],{"class":300}," log",[261,500,466],{"class":296},[261,502,332],{"class":355},[261,504,359],{"class":368},[261,506,362],{"class":296},[261,508,510,513,515,517,519,522],{"class":263,"line":509},12,[261,511,512],{"class":368},"    method",[261,514,372],{"class":296},[261,516,434],{"class":300},[261,518,480],{"class":296},[261,520,521],{"class":300},"method",[261,523,524],{"class":296},",\n",[261,526,528,531,533,535,537,540],{"class":263,"line":527},13,[261,529,530],{"class":368},"    path",[261,532,372],{"class":296},[261,534,463],{"class":300},[261,536,480],{"class":296},[261,538,539],{"class":300},"pathname",[261,541,524],{"class":296},[261,543,545,548],{"class":263,"line":544},14,[261,546,547],{"class":296},"  }",[261,549,399],{"class":368},[261,551,553],{"class":263,"line":552},15,[261,554,349],{"emptyLinePlaceholder":348},[261,556,558,561,563,566,568],{"class":263,"line":557},16,[261,559,560],{"class":300},"  locals",[261,562,480],{"class":296},[261,564,565],{"class":300},"log",[261,567,466],{"class":296},[261,569,570],{"class":300}," log\n",[261,572,574],{"class":263,"line":573},17,[261,575,349],{"emptyLinePlaceholder":348},[261,577,579,582],{"class":263,"line":578},18,[261,580,581],{"class":292},"  try",[261,583,454],{"class":296},[261,585,587,590,593,595,598,600],{"class":263,"line":586},19,[261,588,589],{"class":413},"    const",[261,591,592],{"class":300}," response",[261,594,466],{"class":296},[261,596,597],{"class":292}," await",[261,599,445],{"class":355},[261,601,602],{"class":368},"()\n",[261,604,606,609,611,614],{"class":263,"line":605},20,[261,607,608],{"class":300},"    log",[261,610,480],{"class":296},[261,612,613],{"class":355},"emit",[261,615,602],{"class":368},[261,617,619,622],{"class":263,"line":618},21,[261,620,621],{"class":292},"    return",[261,623,624],{"class":300}," response\n",[261,626,628,630,633,636,639,642],{"class":263,"line":627},22,[261,629,547],{"class":296},[261,631,632],{"class":292}," catch",[261,634,635],{"class":368}," (",[261,637,638],{"class":300},"error",[261,640,641],{"class":368},") ",[261,643,362],{"class":296},[261,645,647,649,651,653,655,657,660,663,666,669,672,674,676,678,681,683,685],{"class":263,"line":646},23,[261,648,608],{"class":300},[261,650,480],{"class":296},[261,652,638],{"class":355},[261,654,359],{"class":368},[261,656,638],{"class":300},[261,658,659],{"class":296}," instanceof",[261,661,662],{"class":267}," Error",[261,664,665],{"class":296}," ?",[261,667,668],{"class":300}," error",[261,670,671],{"class":296}," :",[261,673,469],{"class":296},[261,675,662],{"class":355},[261,677,359],{"class":368},[261,679,680],{"class":355},"String",[261,682,359],{"class":368},[261,684,638],{"class":300},[261,686,687],{"class":368},")))\n",[261,689,691,693,695,697],{"class":263,"line":690},24,[261,692,608],{"class":300},[261,694,480],{"class":296},[261,696,613],{"class":355},[261,698,602],{"class":368},[261,700,702,705],{"class":263,"line":701},25,[261,703,704],{"class":292},"    throw",[261,706,707],{"class":300}," error\n",[261,709,711],{"class":263,"line":710},26,[261,712,713],{"class":296},"  }\n",[261,715,717,719],{"class":263,"line":716},27,[261,718,396],{"class":296},[261,720,399],{"class":300},[247,722,724],{"id":723},"_3-type-your-locals","3. Type your locals",[252,726,729],{"className":282,"code":727,"filename":728,"language":285,"meta":257,"style":257},"/// \u003Creference types=\"astro/client\" />\n\nimport type { RequestLogger } from 'evlog'\n\ndeclare namespace App {\n  interface Locals {\n    log: RequestLogger\n  }\n}\n","src/env.d.ts",[229,730,731,762,766,788,792,805,815,824,828],{"__ignoreMap":257},[261,732,733,737,740,744,748,750,753,757,759],{"class":263,"line":264},[261,734,736],{"class":735},"sHwdD","/// ",[261,738,739],{"class":292},"\u003C",[261,741,743],{"class":742},"s5tWE","reference",[261,745,747],{"class":746},"s6hCs"," types",[261,749,420],{"class":292},[261,751,752],{"class":292},"\"",[261,754,756],{"class":755},"smbvS","astro/client",[261,758,752],{"class":292},[261,760,761],{"class":292}," />\n",[261,763,764],{"class":263,"line":319},[261,765,349],{"emptyLinePlaceholder":348},[261,767,768,770,773,775,778,780,782,784,786],{"class":263,"line":345},[261,769,293],{"class":292},[261,771,772],{"class":292}," type",[261,774,297],{"class":296},[261,776,777],{"class":300}," RequestLogger",[261,779,304],{"class":296},[261,781,307],{"class":292},[261,783,310],{"class":296},[261,785,231],{"class":271},[261,787,316],{"class":296},[261,789,790],{"class":263,"line":352},[261,791,349],{"emptyLinePlaceholder":348},[261,793,794,797,800,803],{"class":263,"line":365},[261,795,796],{"class":413},"declare",[261,798,799],{"class":413}," namespace",[261,801,802],{"class":267}," App",[261,804,454],{"class":296},[261,806,807,810,813],{"class":263,"line":393},[261,808,809],{"class":413},"  interface",[261,811,812],{"class":267}," Locals",[261,814,454],{"class":296},[261,816,817,819,821],{"class":263,"line":402},[261,818,608],{"class":368},[261,820,372],{"class":296},[261,822,823],{"class":267}," RequestLogger\n",[261,825,826],{"class":263,"line":407},[261,827,713],{"class":296},[261,829,830],{"class":263,"line":457},[261,831,832],{"class":296},"}\n",[243,834,111],{"id":835},"wide-events",[225,837,838,839,842],{},"Access the logger from ",[229,840,841],{},"Astro.locals"," in your pages and API routes:",[252,844,847],{"className":282,"code":845,"filename":846,"language":285,"meta":257,"style":257},"import type { APIRoute } from 'astro'\n\nexport const GET: APIRoute = async ({ params, locals }) => {\n  locals.log.set({ user: { id: params.id } })\n\n  const user = await db.findUser(params.id)\n  locals.log.set({ user: { name: user.name, plan: user.plan } })\n\n  return new Response(JSON.stringify(user), {\n    headers: { 'Content-Type': 'application/json' },\n  })\n}\n","src/pages/api/users/[id].ts",[229,848,849,871,875,909,952,956,985,1039,1043,1074,1101,1107],{"__ignoreMap":257},[261,850,851,853,855,857,860,862,864,866,869],{"class":263,"line":264},[261,852,293],{"class":292},[261,854,772],{"class":292},[261,856,297],{"class":296},[261,858,859],{"class":300}," APIRoute",[261,861,304],{"class":296},[261,863,307],{"class":292},[261,865,310],{"class":296},[261,867,868],{"class":271},"astro",[261,870,316],{"class":296},[261,872,873],{"class":263,"line":319},[261,874,349],{"emptyLinePlaceholder":348},[261,876,877,879,881,884,886,888,890,893,895,898,900,902,905,907],{"class":263,"line":345},[261,878,410],{"class":292},[261,880,414],{"class":413},[261,882,883],{"class":300}," GET",[261,885,372],{"class":296},[261,887,859],{"class":267},[261,889,466],{"class":296},[261,891,892],{"class":413}," async",[261,894,430],{"class":296},[261,896,897],{"class":433}," params",[261,899,329],{"class":296},[261,901,439],{"class":433},[261,903,904],{"class":296}," })",[261,906,451],{"class":413},[261,908,454],{"class":296},[261,910,911,913,915,917,919,922,924,927,930,932,934,937,939,941,943,946,948,950],{"class":263,"line":352},[261,912,560],{"class":300},[261,914,480],{"class":296},[261,916,565],{"class":300},[261,918,480],{"class":296},[261,920,921],{"class":355},"set",[261,923,359],{"class":368},[261,925,926],{"class":296},"{",[261,928,929],{"class":368}," user",[261,931,372],{"class":296},[261,933,297],{"class":296},[261,935,936],{"class":368}," id",[261,938,372],{"class":296},[261,940,897],{"class":300},[261,942,480],{"class":296},[261,944,945],{"class":300},"id",[261,947,304],{"class":296},[261,949,304],{"class":296},[261,951,399],{"class":368},[261,953,954],{"class":263,"line":365},[261,955,349],{"emptyLinePlaceholder":348},[261,957,958,960,962,964,966,969,971,974,976,979,981,983],{"class":263,"line":393},[261,959,460],{"class":413},[261,961,929],{"class":300},[261,963,466],{"class":296},[261,965,597],{"class":292},[261,967,968],{"class":300}," db",[261,970,480],{"class":296},[261,972,973],{"class":355},"findUser",[261,975,359],{"class":368},[261,977,978],{"class":300},"params",[261,980,480],{"class":296},[261,982,945],{"class":300},[261,984,399],{"class":368},[261,986,987,989,991,993,995,997,999,1001,1003,1005,1007,1010,1012,1014,1016,1019,1021,1024,1026,1028,1030,1033,1035,1037],{"class":263,"line":402},[261,988,560],{"class":300},[261,990,480],{"class":296},[261,992,565],{"class":300},[261,994,480],{"class":296},[261,996,921],{"class":355},[261,998,359],{"class":368},[261,1000,926],{"class":296},[261,1002,929],{"class":368},[261,1004,372],{"class":296},[261,1006,297],{"class":296},[261,1008,1009],{"class":368}," name",[261,1011,372],{"class":296},[261,1013,929],{"class":300},[261,1015,480],{"class":296},[261,1017,1018],{"class":300},"name",[261,1020,329],{"class":296},[261,1022,1023],{"class":368}," plan",[261,1025,372],{"class":296},[261,1027,929],{"class":300},[261,1029,480],{"class":296},[261,1031,1032],{"class":300},"plan",[261,1034,304],{"class":296},[261,1036,304],{"class":296},[261,1038,399],{"class":368},[261,1040,1041],{"class":263,"line":407},[261,1042,349],{"emptyLinePlaceholder":348},[261,1044,1045,1048,1050,1053,1055,1058,1060,1063,1065,1068,1070,1072],{"class":263,"line":457},[261,1046,1047],{"class":292},"  return",[261,1049,469],{"class":296},[261,1051,1052],{"class":355}," Response",[261,1054,359],{"class":368},[261,1056,1057],{"class":300},"JSON",[261,1059,480],{"class":296},[261,1061,1062],{"class":355},"stringify",[261,1064,359],{"class":368},[261,1066,1067],{"class":300},"user",[261,1069,448],{"class":368},[261,1071,329],{"class":296},[261,1073,454],{"class":296},[261,1075,1076,1079,1081,1083,1085,1088,1090,1092,1094,1097,1099],{"class":263,"line":488},[261,1077,1078],{"class":368},"    headers",[261,1080,372],{"class":296},[261,1082,297],{"class":296},[261,1084,310],{"class":296},[261,1086,1087],{"class":368},"Content-Type",[261,1089,387],{"class":296},[261,1091,372],{"class":296},[261,1093,310],{"class":296},[261,1095,1096],{"class":271},"application/json",[261,1098,387],{"class":296},[261,1100,390],{"class":296},[261,1102,1103,1105],{"class":263,"line":493},[261,1104,547],{"class":296},[261,1106,399],{"class":368},[261,1108,1109],{"class":263,"line":509},[261,1110,832],{"class":296},[252,1112,1115],{"className":254,"code":1113,"filename":1114,"language":256,"meta":257,"style":257},"14:58:15 INFO [my-astro-app] GET /api/users/usr_123\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[229,1116,1117,1128,1145],{"__ignoreMap":257},[261,1118,1119,1122,1125],{"class":263,"line":264},[261,1120,1121],{"class":267},"14:58:15",[261,1123,1124],{"class":271}," INFO",[261,1126,1127],{"class":300}," [my-astro-app] GET /api/users/usr_123\n",[261,1129,1130,1133,1136,1139,1142],{"class":263,"line":319},[261,1131,1132],{"class":267},"  ├─",[261,1134,1135],{"class":271}," user:",[261,1137,1138],{"class":271}," id=usr_123",[261,1140,1141],{"class":271}," name=Alice",[261,1143,1144],{"class":271}," plan=pro\n",[261,1146,1147,1150,1153],{"class":263,"line":345},[261,1148,1149],{"class":267},"  └─",[261,1151,1152],{"class":271}," requestId:",[261,1154,1155],{"class":271}," 4a8ff3a8-...\n",[243,1157,1159],{"id":1158},"error-handling","Error Handling",[225,1161,1162,1163,1166],{},"Use ",[229,1164,1165],{},"createError"," for structured errors:",[252,1168,1171],{"className":282,"code":1169,"filename":1170,"language":285,"meta":257,"style":257},"import type { APIRoute } from 'astro'\nimport { createError, parseError } from 'evlog'\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n  const body = await request.json()\n  locals.log.set({ cart: { items: body.items } })\n\n  if (!body.paymentMethod) {\n    const error = createError({\n      status: 400,\n      message: 'Missing payment method',\n      why: 'No payment method was provided',\n      fix: 'Include a paymentMethod field in the request body',\n    })\n    locals.log.error(error)\n    const parsed = parseError(error)\n    return new Response(JSON.stringify(parsed), { status: parsed.status })\n  }\n\n  return new Response(JSON.stringify({ success: true }))\n}\n","src/pages/api/checkout.ts",[229,1172,1173,1193,1217,1221,1252,1272,1313,1317,1339,1353,1366,1382,1398,1414,1421,1440,1457,1500,1504,1508,1542],{"__ignoreMap":257},[261,1174,1175,1177,1179,1181,1183,1185,1187,1189,1191],{"class":263,"line":264},[261,1176,293],{"class":292},[261,1178,772],{"class":292},[261,1180,297],{"class":296},[261,1182,859],{"class":300},[261,1184,304],{"class":296},[261,1186,307],{"class":292},[261,1188,310],{"class":296},[261,1190,868],{"class":271},[261,1192,316],{"class":296},[261,1194,1195,1197,1199,1202,1204,1207,1209,1211,1213,1215],{"class":263,"line":319},[261,1196,293],{"class":292},[261,1198,297],{"class":296},[261,1200,1201],{"class":300}," createError",[261,1203,329],{"class":296},[261,1205,1206],{"class":300}," parseError",[261,1208,304],{"class":296},[261,1210,307],{"class":292},[261,1212,310],{"class":296},[261,1214,231],{"class":271},[261,1216,316],{"class":296},[261,1218,1219],{"class":263,"line":345},[261,1220,349],{"emptyLinePlaceholder":348},[261,1222,1223,1225,1227,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250],{"class":263,"line":352},[261,1224,410],{"class":292},[261,1226,414],{"class":413},[261,1228,1229],{"class":300}," POST",[261,1231,372],{"class":296},[261,1233,859],{"class":267},[261,1235,466],{"class":296},[261,1237,892],{"class":413},[261,1239,430],{"class":296},[261,1241,434],{"class":433},[261,1243,329],{"class":296},[261,1245,439],{"class":433},[261,1247,904],{"class":296},[261,1249,451],{"class":413},[261,1251,454],{"class":296},[261,1253,1254,1256,1259,1261,1263,1265,1267,1270],{"class":263,"line":365},[261,1255,460],{"class":413},[261,1257,1258],{"class":300}," body",[261,1260,466],{"class":296},[261,1262,597],{"class":292},[261,1264,434],{"class":300},[261,1266,480],{"class":296},[261,1268,1269],{"class":355},"json",[261,1271,602],{"class":368},[261,1273,1274,1276,1278,1280,1282,1284,1286,1288,1291,1293,1295,1298,1300,1302,1304,1307,1309,1311],{"class":263,"line":393},[261,1275,560],{"class":300},[261,1277,480],{"class":296},[261,1279,565],{"class":300},[261,1281,480],{"class":296},[261,1283,921],{"class":355},[261,1285,359],{"class":368},[261,1287,926],{"class":296},[261,1289,1290],{"class":368}," cart",[261,1292,372],{"class":296},[261,1294,297],{"class":296},[261,1296,1297],{"class":368}," items",[261,1299,372],{"class":296},[261,1301,1258],{"class":300},[261,1303,480],{"class":296},[261,1305,1306],{"class":300},"items",[261,1308,304],{"class":296},[261,1310,304],{"class":296},[261,1312,399],{"class":368},[261,1314,1315],{"class":263,"line":402},[261,1316,349],{"emptyLinePlaceholder":348},[261,1318,1319,1322,1324,1327,1330,1332,1335,1337],{"class":263,"line":407},[261,1320,1321],{"class":292},"  if",[261,1323,635],{"class":368},[261,1325,1326],{"class":296},"!",[261,1328,1329],{"class":300},"body",[261,1331,480],{"class":296},[261,1333,1334],{"class":300},"paymentMethod",[261,1336,641],{"class":368},[261,1338,362],{"class":296},[261,1340,1341,1343,1345,1347,1349,1351],{"class":263,"line":457},[261,1342,589],{"class":413},[261,1344,668],{"class":300},[261,1346,466],{"class":296},[261,1348,1201],{"class":355},[261,1350,359],{"class":368},[261,1352,362],{"class":296},[261,1354,1355,1358,1360,1364],{"class":263,"line":488},[261,1356,1357],{"class":368},"      status",[261,1359,372],{"class":296},[261,1361,1363],{"class":1362},"sbssI"," 400",[261,1365,524],{"class":296},[261,1367,1368,1371,1373,1375,1378,1380],{"class":263,"line":493},[261,1369,1370],{"class":368},"      message",[261,1372,372],{"class":296},[261,1374,310],{"class":296},[261,1376,1377],{"class":271},"Missing payment method",[261,1379,387],{"class":296},[261,1381,524],{"class":296},[261,1383,1384,1387,1389,1391,1394,1396],{"class":263,"line":509},[261,1385,1386],{"class":368},"      why",[261,1388,372],{"class":296},[261,1390,310],{"class":296},[261,1392,1393],{"class":271},"No payment method was provided",[261,1395,387],{"class":296},[261,1397,524],{"class":296},[261,1399,1400,1403,1405,1407,1410,1412],{"class":263,"line":527},[261,1401,1402],{"class":368},"      fix",[261,1404,372],{"class":296},[261,1406,310],{"class":296},[261,1408,1409],{"class":271},"Include a paymentMethod field in the request body",[261,1411,387],{"class":296},[261,1413,524],{"class":296},[261,1415,1416,1419],{"class":263,"line":544},[261,1417,1418],{"class":296},"    }",[261,1420,399],{"class":368},[261,1422,1423,1426,1428,1430,1432,1434,1436,1438],{"class":263,"line":552},[261,1424,1425],{"class":300},"    locals",[261,1427,480],{"class":296},[261,1429,565],{"class":300},[261,1431,480],{"class":296},[261,1433,638],{"class":355},[261,1435,359],{"class":368},[261,1437,638],{"class":300},[261,1439,399],{"class":368},[261,1441,1442,1444,1447,1449,1451,1453,1455],{"class":263,"line":557},[261,1443,589],{"class":413},[261,1445,1446],{"class":300}," parsed",[261,1448,466],{"class":296},[261,1450,1206],{"class":355},[261,1452,359],{"class":368},[261,1454,638],{"class":300},[261,1456,399],{"class":368},[261,1458,1459,1461,1463,1465,1467,1469,1471,1473,1475,1478,1480,1482,1484,1487,1489,1491,1493,1496,1498],{"class":263,"line":573},[261,1460,621],{"class":292},[261,1462,469],{"class":296},[261,1464,1052],{"class":355},[261,1466,359],{"class":368},[261,1468,1057],{"class":300},[261,1470,480],{"class":296},[261,1472,1062],{"class":355},[261,1474,359],{"class":368},[261,1476,1477],{"class":300},"parsed",[261,1479,448],{"class":368},[261,1481,329],{"class":296},[261,1483,297],{"class":296},[261,1485,1486],{"class":368}," status",[261,1488,372],{"class":296},[261,1490,1446],{"class":300},[261,1492,480],{"class":296},[261,1494,1495],{"class":300},"status",[261,1497,304],{"class":296},[261,1499,399],{"class":368},[261,1501,1502],{"class":263,"line":578},[261,1503,713],{"class":296},[261,1505,1506],{"class":263,"line":586},[261,1507,349],{"emptyLinePlaceholder":348},[261,1509,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1531,1533,1537,1539],{"class":263,"line":605},[261,1511,1047],{"class":292},[261,1513,469],{"class":296},[261,1515,1052],{"class":355},[261,1517,359],{"class":368},[261,1519,1057],{"class":300},[261,1521,480],{"class":296},[261,1523,1062],{"class":355},[261,1525,359],{"class":368},[261,1527,926],{"class":296},[261,1529,1530],{"class":368}," success",[261,1532,372],{"class":296},[261,1534,1536],{"class":1535},"sfNiH"," true",[261,1538,304],{"class":296},[261,1540,1541],{"class":368},"))\n",[261,1543,1544],{"class":263,"line":618},[261,1545,832],{"class":296},[243,1547,1549],{"id":1548},"drain","Drain",[225,1551,1552,1553,1555],{},"Configure drain in ",[229,1554,356],{}," inside your middleware:",[252,1557,1559],{"className":282,"code":1558,"filename":284,"language":285,"meta":257,"style":257},"import { initLogger, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n})\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-astro-app' },\n  drain,\n})\n",[229,1560,1561,1583,1603,1623,1644,1648,1672,1701,1707,1727,1731,1739,1759,1766],{"__ignoreMap":257},[261,1562,1563,1565,1567,1569,1571,1573,1575,1577,1579,1581],{"class":263,"line":264},[261,1564,293],{"class":292},[261,1566,297],{"class":296},[261,1568,326],{"class":300},[261,1570,329],{"class":296},[261,1572,332],{"class":300},[261,1574,304],{"class":296},[261,1576,307],{"class":292},[261,1578,310],{"class":296},[261,1580,231],{"class":271},[261,1582,316],{"class":296},[261,1584,1585,1587,1589,1592,1594,1596,1598,1601],{"class":263,"line":319},[261,1586,293],{"class":292},[261,1588,297],{"class":296},[261,1590,1591],{"class":300}," createAxiomDrain",[261,1593,304],{"class":296},[261,1595,307],{"class":292},[261,1597,310],{"class":296},[261,1599,1600],{"class":271},"evlog/axiom",[261,1602,316],{"class":296},[261,1604,1605,1607,1609,1612,1614,1616,1618,1621],{"class":263,"line":345},[261,1606,293],{"class":292},[261,1608,297],{"class":296},[261,1610,1611],{"class":300}," createDrainPipeline",[261,1613,304],{"class":296},[261,1615,307],{"class":292},[261,1617,310],{"class":296},[261,1619,1620],{"class":271},"evlog/pipeline",[261,1622,316],{"class":296},[261,1624,1625,1627,1629,1631,1634,1636,1638,1640,1642],{"class":263,"line":352},[261,1626,293],{"class":292},[261,1628,772],{"class":292},[261,1630,297],{"class":296},[261,1632,1633],{"class":300}," DrainContext",[261,1635,304],{"class":296},[261,1637,307],{"class":292},[261,1639,310],{"class":296},[261,1641,231],{"class":271},[261,1643,316],{"class":296},[261,1645,1646],{"class":263,"line":365},[261,1647,349],{"emptyLinePlaceholder":348},[261,1649,1650,1653,1656,1658,1660,1662,1665,1668,1670],{"class":263,"line":393},[261,1651,1652],{"class":413},"const",[261,1654,1655],{"class":300}," pipeline ",[261,1657,420],{"class":296},[261,1659,1611],{"class":355},[261,1661,739],{"class":296},[261,1663,1664],{"class":267},"DrainContext",[261,1666,1667],{"class":296},">",[261,1669,359],{"class":300},[261,1671,362],{"class":296},[261,1673,1674,1677,1679,1681,1684,1686,1689,1691,1694,1696,1699],{"class":263,"line":402},[261,1675,1676],{"class":368},"  batch",[261,1678,372],{"class":296},[261,1680,297],{"class":296},[261,1682,1683],{"class":368}," size",[261,1685,372],{"class":296},[261,1687,1688],{"class":1362}," 50",[261,1690,329],{"class":296},[261,1692,1693],{"class":368}," intervalMs",[261,1695,372],{"class":296},[261,1697,1698],{"class":1362}," 5000",[261,1700,390],{"class":296},[261,1702,1703,1705],{"class":263,"line":407},[261,1704,396],{"class":296},[261,1706,399],{"class":300},[261,1708,1709,1711,1714,1716,1719,1721,1724],{"class":263,"line":457},[261,1710,1652],{"class":413},[261,1712,1713],{"class":300}," drain ",[261,1715,420],{"class":296},[261,1717,1718],{"class":355}," pipeline",[261,1720,359],{"class":300},[261,1722,1723],{"class":355},"createAxiomDrain",[261,1725,1726],{"class":300},"())\n",[261,1728,1729],{"class":263,"line":488},[261,1730,349],{"emptyLinePlaceholder":348},[261,1732,1733,1735,1737],{"class":263,"line":493},[261,1734,356],{"class":355},[261,1736,359],{"class":300},[261,1738,362],{"class":296},[261,1740,1741,1743,1745,1747,1749,1751,1753,1755,1757],{"class":263,"line":509},[261,1742,369],{"class":368},[261,1744,372],{"class":296},[261,1746,297],{"class":296},[261,1748,377],{"class":368},[261,1750,372],{"class":296},[261,1752,310],{"class":296},[261,1754,384],{"class":271},[261,1756,387],{"class":296},[261,1758,390],{"class":296},[261,1760,1761,1764],{"class":263,"line":527},[261,1762,1763],{"class":300},"  drain",[261,1765,524],{"class":296},[261,1767,1768,1770],{"class":263,"line":544},[261,1769,396],{"class":296},[261,1771,399],{"class":300},[234,1773,1774,1775,1778],{"color":236,"icon":13},"See the ",[1776,1777,140],"a",{"href":145}," docs for all available drain adapters.",[1780,1781,1782],"style",{},"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 .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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}html pre.shiki code .smbvS, html code.shiki .smbvS{--shiki-light:#91B859;--shiki-light-font-style:italic;--shiki-default:#C3E88D;--shiki-default-font-style:italic;--shiki-dark:#C3E88D;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":257,"searchDepth":319,"depth":319,"links":1784},[1785,1790,1791,1792],{"id":245,"depth":319,"text":20,"children":1786},[1787,1788,1789],{"id":249,"depth":345,"text":250},{"id":278,"depth":345,"text":279},{"id":723,"depth":345,"text":724},{"id":835,"depth":319,"text":111},{"id":1158,"depth":319,"text":1159},{"id":1548,"depth":319,"text":1549},"Using evlog with Astro — wide events and structured errors in Astro server middleware.","md",null,{},{"title":101,"icon":104},{"title":101,"description":1793},"BQLgniMPgfg5pL5RY7yvlXNKc4qG87-5nq5-g5z1MrM",[1801,1803],{"title":96,"path":97,"stem":98,"description":1802,"icon":99,"children":-1},"Using evlog in standalone TypeScript — scripts, CLI tools, queues, cron jobs, and any TypeScript process.",{"title":111,"path":112,"stem":113,"description":1804,"icon":114,"children":-1},"Learn how to design effective wide events that capture everything you need in a single log. One comprehensive event per request with full context.",1773097847272]