[{"data":1,"prerenderedAt":2236},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-astro":434,"-integrate-frameworks-astro-surround":2231},[4,30,80,240,348,403],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,152],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"children":156,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[157,161,166,171,176,181,186,191,196,201,206,211,216,221,225,230,235],{"title":36,"path":158,"stem":159,"icon":160},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":162,"path":163,"stem":164,"icon":165},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":167,"path":168,"stem":169,"icon":170},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":172,"path":173,"stem":174,"icon":175},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":177,"path":178,"stem":179,"icon":180},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":182,"path":183,"stem":184,"icon":185},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":187,"path":188,"stem":189,"icon":190},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":192,"path":193,"stem":194,"icon":195},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":197,"path":198,"stem":199,"icon":200},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":202,"path":203,"stem":204,"icon":205},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":207,"path":208,"stem":209,"icon":210},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":212,"path":213,"stem":214,"icon":215},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":217,"path":218,"stem":219,"icon":220},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":222,"path":223,"stem":224,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":226,"path":227,"stem":228,"icon":229},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":231,"path":232,"stem":233,"icon":234},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":236,"path":237,"stem":238,"icon":239},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":241,"path":242,"stem":243,"children":244,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[245,249,254,283,311,343],{"title":36,"path":246,"stem":247,"icon":248},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":250,"path":251,"stem":252,"icon":253},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":255,"icon":256,"path":257,"stem":258,"children":259,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[260,263,268,273,278],{"title":36,"path":261,"stem":262,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":264,"path":265,"stem":266,"icon":267},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":269,"path":270,"stem":271,"icon":272},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":274,"path":275,"stem":276,"icon":277},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":279,"path":280,"stem":281,"icon":282},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":284,"icon":285,"path":286,"stem":287,"children":288,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[289,292,297,302,306],{"title":36,"path":290,"stem":291,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":293,"path":294,"stem":295,"icon":296},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":298,"path":299,"stem":300,"icon":301},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":303,"path":304,"stem":305,"icon":253},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":307,"path":308,"stem":309,"icon":310},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":312,"icon":313,"path":314,"stem":315,"children":316,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[317,320,325,330,335,339],{"title":36,"path":318,"stem":319,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":321,"path":322,"stem":323,"icon":324},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":326,"path":327,"stem":328,"icon":329},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":331,"path":332,"stem":333,"icon":334},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":336,"path":337,"stem":338,"icon":313},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":340,"path":341,"stem":342,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":344,"path":345,"stem":346,"icon":347},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":349,"path":350,"stem":351,"children":352,"page":29},"Extend","\u002Fextend","5.extend",[353,357,362,367,372,376,380,384,388,393,398],{"title":36,"path":354,"stem":355,"icon":356},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":358,"path":359,"stem":360,"icon":361},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":363,"path":364,"stem":365,"icon":366},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":368,"path":369,"stem":370,"icon":371},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":340,"path":373,"stem":374,"icon":375},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":377,"path":378,"stem":379,"icon":356},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":381,"path":382,"stem":383,"icon":347},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":385,"path":386,"stem":387,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":389,"path":390,"stem":391,"icon":392},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":394,"path":395,"stem":396,"icon":397},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":399,"path":400,"stem":401,"icon":402},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":404,"path":405,"stem":406,"children":407,"page":29},"Reference","\u002Freference","6.reference",[408,413,416,421,425,430],{"title":409,"path":410,"stem":411,"icon":412},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":307,"path":414,"stem":415,"icon":310},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":417,"path":418,"stem":419,"icon":420},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":422,"path":423,"stem":424,"icon":313},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":426,"path":427,"stem":428,"icon":429},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":431,"path":432,"stem":433,"icon":347},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":435,"title":226,"body":436,"description":2224,"extension":2225,"links":2226,"meta":2227,"navigation":2228,"path":227,"seo":2229,"stem":228,"__hash__":2230},"docs\u002F3.integrate\u002Fframeworks\u002F14.astro.md",{"type":437,"value":438,"toc":2212},"minimark",[439,448,492,501,577,581,586,657,661,1101,1105,1213,1216,1223,1491,1536,1540,1547,1926,1929,1939,1943,1949,2165,2170,2174,2208],[440,441,442,443,447],"p",{},"Astro doesn't have a dedicated evlog integration. Instead, use the core ",[444,445,446],"code",{},"evlog"," package with Astro's middleware to create request-scoped loggers manually.",[449,450,453,456,478],"prompt",{":actions":451,"description":452,"icon":229},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Astro app",[440,454,455],{},"Set up evlog in my Astro app.",[457,458,459,463,466,469,472,475],"ul",{},[460,461,462],"li",{},"Install evlog: pnpm add evlog",[460,464,465],{},"Import initLogger and createRequestLogger from 'evlog'",[460,467,468],{},"Call initLogger({ env: { service: 'my-app' } }) in Astro middleware",[460,470,471],{},"Create a request logger with createRequestLogger({ method, path }) per request",[460,473,474],{},"Use log.set() in API routes and middleware to accumulate context",[460,476,477],{},"Call log.emit() before returning the response (no auto-emit lifecycle)",[440,479,480,481,487,488],{},"Docs: ",[482,483,484],"a",{"href":484,"rel":485},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Fastro",[486],"nofollow","\nAdapters: ",[482,489,490],{"href":490,"rel":491},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[486],[493,494,496,497,500],"callout",{"color":495,"icon":13},"info","This is a guide-level integration. It uses the generic ",[444,498,499],{},"createRequestLogger"," API rather than a framework-specific module.",[493,502,505,551,564],{"color":503,"icon":504},"warning","i-lucide-cloud",[440,506,507,508,511,512,515,516,519,520,522,523,526,527,532,533,538,539,542,543,550],{},"On ",[509,510,217],"strong",{}," (including Astro with ",[444,513,514],{},"@astrojs\u002Fcloudflare","), set ",[444,517,518],{},"waitUntil"," on ",[444,521,499],{}," to your ",[444,524,525],{},"ExecutionContext#waitUntil"," (properly bound), or use ",[482,528,529],{"href":218},[444,530,531],{},"defineWorkerFetch"," \u002F ",[482,534,535],{"href":218},[444,536,537],{},"createWorkersLogger"," with ",[444,540,541],{},"{ executionCtx }"," on a ",[509,544,545,546,549],{},"Worker ",[444,547,548],{},"fetch"," entry",". Otherwise async drains may never finish after the response is returned.",[440,552,553,554,557,558,560,561,563],{},"For Astro ",[509,555,556],{},"middleware"," (not the raw Worker handler), there is no ",[444,559,531],{},"; you still pass ",[444,562,518],{}," from the adapter-exposed context.",[440,565,566,567,570,571,576],{},"The exact way to read ",[444,568,569],{},"ctx"," from Astro middleware depends on your adapter version — check the ",[482,572,575],{"href":573,"rel":574},"https:\u002F\u002Fdocs.astro.build\u002Fen\u002Fguides\u002Fintegrations-guide\u002Fcloudflare\u002F",[486],"Cloudflare adapter docs",".",[578,579,25],"h2",{"id":580},"quick-start",[582,583,585],"h3",{"id":584},"_1-install","1. Install",[587,588,589,614,628,642],"code-group",{},[590,591,597],"pre",{"className":592,"code":593,"filename":594,"language":595,"meta":596,"style":596},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[444,598,599],{"__ignoreMap":596},[600,601,604,607,611],"span",{"class":602,"line":603},"line",1,[600,605,594],{"class":606},"sBMFI",[600,608,610],{"class":609},"sfazB"," add",[600,612,613],{"class":609}," evlog\n",[590,615,618],{"className":592,"code":616,"filename":617,"language":595,"meta":596,"style":596},"bun add evlog\n","bun",[444,619,620],{"__ignoreMap":596},[600,621,622,624,626],{"class":602,"line":603},[600,623,617],{"class":606},[600,625,610],{"class":609},[600,627,613],{"class":609},[590,629,632],{"className":592,"code":630,"filename":631,"language":595,"meta":596,"style":596},"yarn add evlog\n","yarn",[444,633,634],{"__ignoreMap":596},[600,635,636,638,640],{"class":602,"line":603},[600,637,631],{"class":606},[600,639,610],{"class":609},[600,641,613],{"class":609},[590,643,646],{"className":592,"code":644,"filename":645,"language":595,"meta":596,"style":596},"npm install evlog\n","npm",[444,647,648],{"__ignoreMap":596},[600,649,650,652,655],{"class":602,"line":603},[600,651,645],{"class":606},[600,653,654],{"class":609}," install",[600,656,613],{"class":609},[582,658,660],{"id":659},"_2-create-a-middleware","2. Create a middleware",[590,662,667],{"className":663,"code":664,"filename":665,"language":666,"meta":596,"style":596},"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\u002Fmiddleware.ts","typescript",[444,668,669,698,724,731,744,772,781,786,836,866,871,887,905,922,930,935,951,956,964,983,996,1005,1024,1068,1079,1088,1094],{"__ignoreMap":596},[600,670,671,675,679,683,686,689,692,695],{"class":602,"line":603},[600,672,674],{"class":673},"s7zQu","import",[600,676,678],{"class":677},"sMK4o"," {",[600,680,682],{"class":681},"sTEyZ"," defineMiddleware",[600,684,685],{"class":677}," }",[600,687,688],{"class":673}," from",[600,690,691],{"class":677}," '",[600,693,694],{"class":609},"astro:middleware",[600,696,697],{"class":677},"'\n",[600,699,701,703,705,708,711,714,716,718,720,722],{"class":602,"line":700},2,[600,702,674],{"class":673},[600,704,678],{"class":677},[600,706,707],{"class":681}," initLogger",[600,709,710],{"class":677},",",[600,712,713],{"class":681}," createRequestLogger",[600,715,685],{"class":677},[600,717,688],{"class":673},[600,719,691],{"class":677},[600,721,446],{"class":609},[600,723,697],{"class":677},[600,725,727],{"class":602,"line":726},3,[600,728,730],{"emptyLinePlaceholder":729},true,"\n",[600,732,734,738,741],{"class":602,"line":733},4,[600,735,737],{"class":736},"s2Zo4","initLogger",[600,739,740],{"class":681},"(",[600,742,743],{"class":677},"{\n",[600,745,747,751,754,756,759,761,763,766,769],{"class":602,"line":746},5,[600,748,750],{"class":749},"swJcz","  env",[600,752,753],{"class":677},":",[600,755,678],{"class":677},[600,757,758],{"class":749}," service",[600,760,753],{"class":677},[600,762,691],{"class":677},[600,764,765],{"class":609},"my-astro-app",[600,767,768],{"class":677},"'",[600,770,771],{"class":677}," },\n",[600,773,775,778],{"class":602,"line":774},6,[600,776,777],{"class":677},"}",[600,779,780],{"class":681},")\n",[600,782,784],{"class":602,"line":783},7,[600,785,730],{"emptyLinePlaceholder":729},[600,787,789,792,796,799,802,804,806,809,812,816,818,821,824,827,830,833],{"class":602,"line":788},8,[600,790,791],{"class":673},"export",[600,793,795],{"class":794},"spNyl"," const",[600,797,798],{"class":681}," onRequest ",[600,800,801],{"class":677},"=",[600,803,682],{"class":736},[600,805,740],{"class":681},[600,807,808],{"class":794},"async",[600,810,811],{"class":677}," ({",[600,813,815],{"class":814},"sHdIc"," request",[600,817,710],{"class":677},[600,819,820],{"class":814}," locals",[600,822,823],{"class":677}," },",[600,825,826],{"class":814}," next",[600,828,829],{"class":677},")",[600,831,832],{"class":794}," =>",[600,834,835],{"class":677}," {\n",[600,837,839,842,845,848,851,854,856,859,861,864],{"class":602,"line":838},9,[600,840,841],{"class":794},"  const",[600,843,844],{"class":681}," url",[600,846,847],{"class":677}," =",[600,849,850],{"class":677}," new",[600,852,853],{"class":736}," URL",[600,855,740],{"class":749},[600,857,858],{"class":681},"request",[600,860,576],{"class":677},[600,862,863],{"class":681},"url",[600,865,780],{"class":749},[600,867,869],{"class":602,"line":868},10,[600,870,730],{"emptyLinePlaceholder":729},[600,872,874,876,879,881,883,885],{"class":602,"line":873},11,[600,875,841],{"class":794},[600,877,878],{"class":681}," log",[600,880,847],{"class":677},[600,882,713],{"class":736},[600,884,740],{"class":749},[600,886,743],{"class":677},[600,888,890,893,895,897,899,902],{"class":602,"line":889},12,[600,891,892],{"class":749},"    method",[600,894,753],{"class":677},[600,896,815],{"class":681},[600,898,576],{"class":677},[600,900,901],{"class":681},"method",[600,903,904],{"class":677},",\n",[600,906,908,911,913,915,917,920],{"class":602,"line":907},13,[600,909,910],{"class":749},"    path",[600,912,753],{"class":677},[600,914,844],{"class":681},[600,916,576],{"class":677},[600,918,919],{"class":681},"pathname",[600,921,904],{"class":677},[600,923,925,928],{"class":602,"line":924},14,[600,926,927],{"class":677},"  }",[600,929,780],{"class":749},[600,931,933],{"class":602,"line":932},15,[600,934,730],{"emptyLinePlaceholder":729},[600,936,938,941,943,946,948],{"class":602,"line":937},16,[600,939,940],{"class":681},"  locals",[600,942,576],{"class":677},[600,944,945],{"class":681},"log",[600,947,847],{"class":677},[600,949,950],{"class":681}," log\n",[600,952,954],{"class":602,"line":953},17,[600,955,730],{"emptyLinePlaceholder":729},[600,957,959,962],{"class":602,"line":958},18,[600,960,961],{"class":673},"  try",[600,963,835],{"class":677},[600,965,967,970,973,975,978,980],{"class":602,"line":966},19,[600,968,969],{"class":794},"    const",[600,971,972],{"class":681}," response",[600,974,847],{"class":677},[600,976,977],{"class":673}," await",[600,979,826],{"class":736},[600,981,982],{"class":749},"()\n",[600,984,986,989,991,994],{"class":602,"line":985},20,[600,987,988],{"class":681},"    log",[600,990,576],{"class":677},[600,992,993],{"class":736},"emit",[600,995,982],{"class":749},[600,997,999,1002],{"class":602,"line":998},21,[600,1000,1001],{"class":673},"    return",[600,1003,1004],{"class":681}," response\n",[600,1006,1008,1010,1013,1016,1019,1022],{"class":602,"line":1007},22,[600,1009,927],{"class":677},[600,1011,1012],{"class":673}," catch",[600,1014,1015],{"class":749}," (",[600,1017,1018],{"class":681},"error",[600,1020,1021],{"class":749},") ",[600,1023,743],{"class":677},[600,1025,1027,1029,1031,1033,1035,1037,1040,1043,1046,1049,1052,1054,1056,1058,1061,1063,1065],{"class":602,"line":1026},23,[600,1028,988],{"class":681},[600,1030,576],{"class":677},[600,1032,1018],{"class":736},[600,1034,740],{"class":749},[600,1036,1018],{"class":681},[600,1038,1039],{"class":677}," instanceof",[600,1041,1042],{"class":606}," Error",[600,1044,1045],{"class":677}," ?",[600,1047,1048],{"class":681}," error",[600,1050,1051],{"class":677}," :",[600,1053,850],{"class":677},[600,1055,1042],{"class":736},[600,1057,740],{"class":749},[600,1059,1060],{"class":736},"String",[600,1062,740],{"class":749},[600,1064,1018],{"class":681},[600,1066,1067],{"class":749},")))\n",[600,1069,1071,1073,1075,1077],{"class":602,"line":1070},24,[600,1072,988],{"class":681},[600,1074,576],{"class":677},[600,1076,993],{"class":736},[600,1078,982],{"class":749},[600,1080,1082,1085],{"class":602,"line":1081},25,[600,1083,1084],{"class":673},"    throw",[600,1086,1087],{"class":681}," error\n",[600,1089,1091],{"class":602,"line":1090},26,[600,1092,1093],{"class":677},"  }\n",[600,1095,1097,1099],{"class":602,"line":1096},27,[600,1098,777],{"class":677},[600,1100,780],{"class":681},[582,1102,1104],{"id":1103},"_3-type-your-locals","3. Type your locals",[590,1106,1109],{"className":663,"code":1107,"filename":1108,"language":666,"meta":596,"style":596},"\u002F\u002F\u002F \u003Creference types=\"astro\u002Fclient\" \u002F>\n\nimport type { RequestLogger } from 'evlog'\n\ndeclare namespace App {\n  interface Locals {\n    log: RequestLogger\n  }\n}\n","src\u002Fenv.d.ts",[444,1110,1111,1142,1146,1168,1172,1185,1195,1204,1208],{"__ignoreMap":596},[600,1112,1113,1117,1120,1124,1128,1130,1133,1137,1139],{"class":602,"line":603},[600,1114,1116],{"class":1115},"sHwdD","\u002F\u002F\u002F ",[600,1118,1119],{"class":673},"\u003C",[600,1121,1123],{"class":1122},"s5tWE","reference",[600,1125,1127],{"class":1126},"s6hCs"," types",[600,1129,801],{"class":673},[600,1131,1132],{"class":673},"\"",[600,1134,1136],{"class":1135},"smbvS","astro\u002Fclient",[600,1138,1132],{"class":673},[600,1140,1141],{"class":673}," \u002F>\n",[600,1143,1144],{"class":602,"line":700},[600,1145,730],{"emptyLinePlaceholder":729},[600,1147,1148,1150,1153,1155,1158,1160,1162,1164,1166],{"class":602,"line":726},[600,1149,674],{"class":673},[600,1151,1152],{"class":673}," type",[600,1154,678],{"class":677},[600,1156,1157],{"class":681}," RequestLogger",[600,1159,685],{"class":677},[600,1161,688],{"class":673},[600,1163,691],{"class":677},[600,1165,446],{"class":609},[600,1167,697],{"class":677},[600,1169,1170],{"class":602,"line":733},[600,1171,730],{"emptyLinePlaceholder":729},[600,1173,1174,1177,1180,1183],{"class":602,"line":746},[600,1175,1176],{"class":794},"declare",[600,1178,1179],{"class":794}," namespace",[600,1181,1182],{"class":606}," App",[600,1184,835],{"class":677},[600,1186,1187,1190,1193],{"class":602,"line":774},[600,1188,1189],{"class":794},"  interface",[600,1191,1192],{"class":606}," Locals",[600,1194,835],{"class":677},[600,1196,1197,1199,1201],{"class":602,"line":783},[600,1198,988],{"class":749},[600,1200,753],{"class":677},[600,1202,1203],{"class":606}," RequestLogger\n",[600,1205,1206],{"class":602,"line":788},[600,1207,1093],{"class":677},[600,1209,1210],{"class":602,"line":838},[600,1211,1212],{"class":677},"}\n",[578,1214,46],{"id":1215},"wide-events",[440,1217,1218,1219,1222],{},"Access the logger from ",[444,1220,1221],{},"Astro.locals"," in your pages and API routes:",[590,1224,1227],{"className":663,"code":1225,"filename":1226,"language":666,"meta":596,"style":596},"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\u002Fjson' },\n  })\n}\n","src\u002Fpages\u002Fapi\u002Fusers\u002F[id].ts",[444,1228,1229,1251,1255,1289,1332,1336,1365,1419,1423,1454,1481,1487],{"__ignoreMap":596},[600,1230,1231,1233,1235,1237,1240,1242,1244,1246,1249],{"class":602,"line":603},[600,1232,674],{"class":673},[600,1234,1152],{"class":673},[600,1236,678],{"class":677},[600,1238,1239],{"class":681}," APIRoute",[600,1241,685],{"class":677},[600,1243,688],{"class":673},[600,1245,691],{"class":677},[600,1247,1248],{"class":609},"astro",[600,1250,697],{"class":677},[600,1252,1253],{"class":602,"line":700},[600,1254,730],{"emptyLinePlaceholder":729},[600,1256,1257,1259,1261,1264,1266,1268,1270,1273,1275,1278,1280,1282,1285,1287],{"class":602,"line":726},[600,1258,791],{"class":673},[600,1260,795],{"class":794},[600,1262,1263],{"class":681}," GET",[600,1265,753],{"class":677},[600,1267,1239],{"class":606},[600,1269,847],{"class":677},[600,1271,1272],{"class":794}," async",[600,1274,811],{"class":677},[600,1276,1277],{"class":814}," params",[600,1279,710],{"class":677},[600,1281,820],{"class":814},[600,1283,1284],{"class":677}," })",[600,1286,832],{"class":794},[600,1288,835],{"class":677},[600,1290,1291,1293,1295,1297,1299,1302,1304,1307,1310,1312,1314,1317,1319,1321,1323,1326,1328,1330],{"class":602,"line":733},[600,1292,940],{"class":681},[600,1294,576],{"class":677},[600,1296,945],{"class":681},[600,1298,576],{"class":677},[600,1300,1301],{"class":736},"set",[600,1303,740],{"class":749},[600,1305,1306],{"class":677},"{",[600,1308,1309],{"class":749}," user",[600,1311,753],{"class":677},[600,1313,678],{"class":677},[600,1315,1316],{"class":749}," id",[600,1318,753],{"class":677},[600,1320,1277],{"class":681},[600,1322,576],{"class":677},[600,1324,1325],{"class":681},"id",[600,1327,685],{"class":677},[600,1329,685],{"class":677},[600,1331,780],{"class":749},[600,1333,1334],{"class":602,"line":746},[600,1335,730],{"emptyLinePlaceholder":729},[600,1337,1338,1340,1342,1344,1346,1349,1351,1354,1356,1359,1361,1363],{"class":602,"line":774},[600,1339,841],{"class":794},[600,1341,1309],{"class":681},[600,1343,847],{"class":677},[600,1345,977],{"class":673},[600,1347,1348],{"class":681}," db",[600,1350,576],{"class":677},[600,1352,1353],{"class":736},"findUser",[600,1355,740],{"class":749},[600,1357,1358],{"class":681},"params",[600,1360,576],{"class":677},[600,1362,1325],{"class":681},[600,1364,780],{"class":749},[600,1366,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387,1390,1392,1394,1396,1399,1401,1404,1406,1408,1410,1413,1415,1417],{"class":602,"line":783},[600,1368,940],{"class":681},[600,1370,576],{"class":677},[600,1372,945],{"class":681},[600,1374,576],{"class":677},[600,1376,1301],{"class":736},[600,1378,740],{"class":749},[600,1380,1306],{"class":677},[600,1382,1309],{"class":749},[600,1384,753],{"class":677},[600,1386,678],{"class":677},[600,1388,1389],{"class":749}," name",[600,1391,753],{"class":677},[600,1393,1309],{"class":681},[600,1395,576],{"class":677},[600,1397,1398],{"class":681},"name",[600,1400,710],{"class":677},[600,1402,1403],{"class":749}," plan",[600,1405,753],{"class":677},[600,1407,1309],{"class":681},[600,1409,576],{"class":677},[600,1411,1412],{"class":681},"plan",[600,1414,685],{"class":677},[600,1416,685],{"class":677},[600,1418,780],{"class":749},[600,1420,1421],{"class":602,"line":788},[600,1422,730],{"emptyLinePlaceholder":729},[600,1424,1425,1428,1430,1433,1435,1438,1440,1443,1445,1448,1450,1452],{"class":602,"line":838},[600,1426,1427],{"class":673},"  return",[600,1429,850],{"class":677},[600,1431,1432],{"class":736}," Response",[600,1434,740],{"class":749},[600,1436,1437],{"class":681},"JSON",[600,1439,576],{"class":677},[600,1441,1442],{"class":736},"stringify",[600,1444,740],{"class":749},[600,1446,1447],{"class":681},"user",[600,1449,829],{"class":749},[600,1451,710],{"class":677},[600,1453,835],{"class":677},[600,1455,1456,1459,1461,1463,1465,1468,1470,1472,1474,1477,1479],{"class":602,"line":868},[600,1457,1458],{"class":749},"    headers",[600,1460,753],{"class":677},[600,1462,678],{"class":677},[600,1464,691],{"class":677},[600,1466,1467],{"class":749},"Content-Type",[600,1469,768],{"class":677},[600,1471,753],{"class":677},[600,1473,691],{"class":677},[600,1475,1476],{"class":609},"application\u002Fjson",[600,1478,768],{"class":677},[600,1480,771],{"class":677},[600,1482,1483,1485],{"class":602,"line":873},[600,1484,927],{"class":677},[600,1486,780],{"class":749},[600,1488,1489],{"class":602,"line":889},[600,1490,1212],{"class":677},[590,1492,1495],{"className":592,"code":1493,"filename":1494,"language":595,"meta":596,"style":596},"14:58:15 INFO [my-astro-app] GET \u002Fapi\u002Fusers\u002Fusr_123\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[444,1496,1497,1508,1525],{"__ignoreMap":596},[600,1498,1499,1502,1505],{"class":602,"line":603},[600,1500,1501],{"class":606},"14:58:15",[600,1503,1504],{"class":609}," INFO",[600,1506,1507],{"class":681}," [my-astro-app] GET \u002Fapi\u002Fusers\u002Fusr_123\n",[600,1509,1510,1513,1516,1519,1522],{"class":602,"line":700},[600,1511,1512],{"class":606},"  ├─",[600,1514,1515],{"class":609}," user:",[600,1517,1518],{"class":609}," id=usr_123",[600,1520,1521],{"class":609}," name=Alice",[600,1523,1524],{"class":609}," plan=pro\n",[600,1526,1527,1530,1533],{"class":602,"line":726},[600,1528,1529],{"class":606},"  └─",[600,1531,1532],{"class":609}," requestId:",[600,1534,1535],{"class":609}," 4a8ff3a8-...\n",[578,1537,1539],{"id":1538},"error-handling","Error Handling",[440,1541,1542,1543,1546],{},"Use ",[444,1544,1545],{},"createError"," for structured errors:",[590,1548,1551],{"className":663,"code":1549,"filename":1550,"language":666,"meta":596,"style":596},"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\u002Fpages\u002Fapi\u002Fcheckout.ts",[444,1552,1553,1573,1597,1601,1632,1652,1693,1697,1719,1733,1746,1762,1778,1794,1801,1820,1837,1880,1884,1888,1922],{"__ignoreMap":596},[600,1554,1555,1557,1559,1561,1563,1565,1567,1569,1571],{"class":602,"line":603},[600,1556,674],{"class":673},[600,1558,1152],{"class":673},[600,1560,678],{"class":677},[600,1562,1239],{"class":681},[600,1564,685],{"class":677},[600,1566,688],{"class":673},[600,1568,691],{"class":677},[600,1570,1248],{"class":609},[600,1572,697],{"class":677},[600,1574,1575,1577,1579,1582,1584,1587,1589,1591,1593,1595],{"class":602,"line":700},[600,1576,674],{"class":673},[600,1578,678],{"class":677},[600,1580,1581],{"class":681}," createError",[600,1583,710],{"class":677},[600,1585,1586],{"class":681}," parseError",[600,1588,685],{"class":677},[600,1590,688],{"class":673},[600,1592,691],{"class":677},[600,1594,446],{"class":609},[600,1596,697],{"class":677},[600,1598,1599],{"class":602,"line":726},[600,1600,730],{"emptyLinePlaceholder":729},[600,1602,1603,1605,1607,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630],{"class":602,"line":733},[600,1604,791],{"class":673},[600,1606,795],{"class":794},[600,1608,1609],{"class":681}," POST",[600,1611,753],{"class":677},[600,1613,1239],{"class":606},[600,1615,847],{"class":677},[600,1617,1272],{"class":794},[600,1619,811],{"class":677},[600,1621,815],{"class":814},[600,1623,710],{"class":677},[600,1625,820],{"class":814},[600,1627,1284],{"class":677},[600,1629,832],{"class":794},[600,1631,835],{"class":677},[600,1633,1634,1636,1639,1641,1643,1645,1647,1650],{"class":602,"line":746},[600,1635,841],{"class":794},[600,1637,1638],{"class":681}," body",[600,1640,847],{"class":677},[600,1642,977],{"class":673},[600,1644,815],{"class":681},[600,1646,576],{"class":677},[600,1648,1649],{"class":736},"json",[600,1651,982],{"class":749},[600,1653,1654,1656,1658,1660,1662,1664,1666,1668,1671,1673,1675,1678,1680,1682,1684,1687,1689,1691],{"class":602,"line":774},[600,1655,940],{"class":681},[600,1657,576],{"class":677},[600,1659,945],{"class":681},[600,1661,576],{"class":677},[600,1663,1301],{"class":736},[600,1665,740],{"class":749},[600,1667,1306],{"class":677},[600,1669,1670],{"class":749}," cart",[600,1672,753],{"class":677},[600,1674,678],{"class":677},[600,1676,1677],{"class":749}," items",[600,1679,753],{"class":677},[600,1681,1638],{"class":681},[600,1683,576],{"class":677},[600,1685,1686],{"class":681},"items",[600,1688,685],{"class":677},[600,1690,685],{"class":677},[600,1692,780],{"class":749},[600,1694,1695],{"class":602,"line":783},[600,1696,730],{"emptyLinePlaceholder":729},[600,1698,1699,1702,1704,1707,1710,1712,1715,1717],{"class":602,"line":788},[600,1700,1701],{"class":673},"  if",[600,1703,1015],{"class":749},[600,1705,1706],{"class":677},"!",[600,1708,1709],{"class":681},"body",[600,1711,576],{"class":677},[600,1713,1714],{"class":681},"paymentMethod",[600,1716,1021],{"class":749},[600,1718,743],{"class":677},[600,1720,1721,1723,1725,1727,1729,1731],{"class":602,"line":838},[600,1722,969],{"class":794},[600,1724,1048],{"class":681},[600,1726,847],{"class":677},[600,1728,1581],{"class":736},[600,1730,740],{"class":749},[600,1732,743],{"class":677},[600,1734,1735,1738,1740,1744],{"class":602,"line":868},[600,1736,1737],{"class":749},"      status",[600,1739,753],{"class":677},[600,1741,1743],{"class":1742},"sbssI"," 400",[600,1745,904],{"class":677},[600,1747,1748,1751,1753,1755,1758,1760],{"class":602,"line":873},[600,1749,1750],{"class":749},"      message",[600,1752,753],{"class":677},[600,1754,691],{"class":677},[600,1756,1757],{"class":609},"Missing payment method",[600,1759,768],{"class":677},[600,1761,904],{"class":677},[600,1763,1764,1767,1769,1771,1774,1776],{"class":602,"line":889},[600,1765,1766],{"class":749},"      why",[600,1768,753],{"class":677},[600,1770,691],{"class":677},[600,1772,1773],{"class":609},"No payment method was provided",[600,1775,768],{"class":677},[600,1777,904],{"class":677},[600,1779,1780,1783,1785,1787,1790,1792],{"class":602,"line":907},[600,1781,1782],{"class":749},"      fix",[600,1784,753],{"class":677},[600,1786,691],{"class":677},[600,1788,1789],{"class":609},"Include a paymentMethod field in the request body",[600,1791,768],{"class":677},[600,1793,904],{"class":677},[600,1795,1796,1799],{"class":602,"line":924},[600,1797,1798],{"class":677},"    }",[600,1800,780],{"class":749},[600,1802,1803,1806,1808,1810,1812,1814,1816,1818],{"class":602,"line":932},[600,1804,1805],{"class":681},"    locals",[600,1807,576],{"class":677},[600,1809,945],{"class":681},[600,1811,576],{"class":677},[600,1813,1018],{"class":736},[600,1815,740],{"class":749},[600,1817,1018],{"class":681},[600,1819,780],{"class":749},[600,1821,1822,1824,1827,1829,1831,1833,1835],{"class":602,"line":937},[600,1823,969],{"class":794},[600,1825,1826],{"class":681}," parsed",[600,1828,847],{"class":677},[600,1830,1586],{"class":736},[600,1832,740],{"class":749},[600,1834,1018],{"class":681},[600,1836,780],{"class":749},[600,1838,1839,1841,1843,1845,1847,1849,1851,1853,1855,1858,1860,1862,1864,1867,1869,1871,1873,1876,1878],{"class":602,"line":953},[600,1840,1001],{"class":673},[600,1842,850],{"class":677},[600,1844,1432],{"class":736},[600,1846,740],{"class":749},[600,1848,1437],{"class":681},[600,1850,576],{"class":677},[600,1852,1442],{"class":736},[600,1854,740],{"class":749},[600,1856,1857],{"class":681},"parsed",[600,1859,829],{"class":749},[600,1861,710],{"class":677},[600,1863,678],{"class":677},[600,1865,1866],{"class":749}," status",[600,1868,753],{"class":677},[600,1870,1826],{"class":681},[600,1872,576],{"class":677},[600,1874,1875],{"class":681},"status",[600,1877,685],{"class":677},[600,1879,780],{"class":749},[600,1881,1882],{"class":602,"line":958},[600,1883,1093],{"class":677},[600,1885,1886],{"class":602,"line":966},[600,1887,730],{"emptyLinePlaceholder":729},[600,1889,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1911,1913,1917,1919],{"class":602,"line":985},[600,1891,1427],{"class":673},[600,1893,850],{"class":677},[600,1895,1432],{"class":736},[600,1897,740],{"class":749},[600,1899,1437],{"class":681},[600,1901,576],{"class":677},[600,1903,1442],{"class":736},[600,1905,740],{"class":749},[600,1907,1306],{"class":677},[600,1909,1910],{"class":749}," success",[600,1912,753],{"class":677},[600,1914,1916],{"class":1915},"sfNiH"," true",[600,1918,685],{"class":677},[600,1920,1921],{"class":749},"))\n",[600,1923,1924],{"class":602,"line":998},[600,1925,1212],{"class":677},[578,1927,409],{"id":1928},"configuration",[440,1930,1931,1932,1935,1936,1938],{},"See the ",[482,1933,1934],{"href":410},"Configuration reference"," for all available options (",[444,1937,737],{},", middleware options, sampling, silent mode, etc.).",[578,1940,1942],{"id":1941},"drain","Drain",[440,1944,1945,1946,1948],{},"Configure drain in ",[444,1947,737],{}," inside your middleware:",[590,1950,1952],{"className":663,"code":1951,"filename":665,"language":666,"meta":596,"style":596},"import { initLogger, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\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",[444,1953,1954,1976,1996,2016,2037,2041,2065,2094,2100,2120,2124,2132,2152,2159],{"__ignoreMap":596},[600,1955,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974],{"class":602,"line":603},[600,1957,674],{"class":673},[600,1959,678],{"class":677},[600,1961,707],{"class":681},[600,1963,710],{"class":677},[600,1965,713],{"class":681},[600,1967,685],{"class":677},[600,1969,688],{"class":673},[600,1971,691],{"class":677},[600,1973,446],{"class":609},[600,1975,697],{"class":677},[600,1977,1978,1980,1982,1985,1987,1989,1991,1994],{"class":602,"line":700},[600,1979,674],{"class":673},[600,1981,678],{"class":677},[600,1983,1984],{"class":681}," createAxiomDrain",[600,1986,685],{"class":677},[600,1988,688],{"class":673},[600,1990,691],{"class":677},[600,1992,1993],{"class":609},"evlog\u002Faxiom",[600,1995,697],{"class":677},[600,1997,1998,2000,2002,2005,2007,2009,2011,2014],{"class":602,"line":726},[600,1999,674],{"class":673},[600,2001,678],{"class":677},[600,2003,2004],{"class":681}," createDrainPipeline",[600,2006,685],{"class":677},[600,2008,688],{"class":673},[600,2010,691],{"class":677},[600,2012,2013],{"class":609},"evlog\u002Fpipeline",[600,2015,697],{"class":677},[600,2017,2018,2020,2022,2024,2027,2029,2031,2033,2035],{"class":602,"line":733},[600,2019,674],{"class":673},[600,2021,1152],{"class":673},[600,2023,678],{"class":677},[600,2025,2026],{"class":681}," DrainContext",[600,2028,685],{"class":677},[600,2030,688],{"class":673},[600,2032,691],{"class":677},[600,2034,446],{"class":609},[600,2036,697],{"class":677},[600,2038,2039],{"class":602,"line":746},[600,2040,730],{"emptyLinePlaceholder":729},[600,2042,2043,2046,2049,2051,2053,2055,2058,2061,2063],{"class":602,"line":774},[600,2044,2045],{"class":794},"const",[600,2047,2048],{"class":681}," pipeline ",[600,2050,801],{"class":677},[600,2052,2004],{"class":736},[600,2054,1119],{"class":677},[600,2056,2057],{"class":606},"DrainContext",[600,2059,2060],{"class":677},">",[600,2062,740],{"class":681},[600,2064,743],{"class":677},[600,2066,2067,2070,2072,2074,2077,2079,2082,2084,2087,2089,2092],{"class":602,"line":783},[600,2068,2069],{"class":749},"  batch",[600,2071,753],{"class":677},[600,2073,678],{"class":677},[600,2075,2076],{"class":749}," size",[600,2078,753],{"class":677},[600,2080,2081],{"class":1742}," 50",[600,2083,710],{"class":677},[600,2085,2086],{"class":749}," intervalMs",[600,2088,753],{"class":677},[600,2090,2091],{"class":1742}," 5000",[600,2093,771],{"class":677},[600,2095,2096,2098],{"class":602,"line":788},[600,2097,777],{"class":677},[600,2099,780],{"class":681},[600,2101,2102,2104,2107,2109,2112,2114,2117],{"class":602,"line":838},[600,2103,2045],{"class":794},[600,2105,2106],{"class":681}," drain ",[600,2108,801],{"class":677},[600,2110,2111],{"class":736}," pipeline",[600,2113,740],{"class":681},[600,2115,2116],{"class":736},"createAxiomDrain",[600,2118,2119],{"class":681},"())\n",[600,2121,2122],{"class":602,"line":868},[600,2123,730],{"emptyLinePlaceholder":729},[600,2125,2126,2128,2130],{"class":602,"line":873},[600,2127,737],{"class":736},[600,2129,740],{"class":681},[600,2131,743],{"class":677},[600,2133,2134,2136,2138,2140,2142,2144,2146,2148,2150],{"class":602,"line":889},[600,2135,750],{"class":749},[600,2137,753],{"class":677},[600,2139,678],{"class":677},[600,2141,758],{"class":749},[600,2143,753],{"class":677},[600,2145,691],{"class":677},[600,2147,765],{"class":609},[600,2149,768],{"class":677},[600,2151,771],{"class":677},[600,2153,2154,2157],{"class":602,"line":907},[600,2155,2156],{"class":681},"  drain",[600,2158,904],{"class":677},[600,2160,2161,2163],{"class":602,"line":924},[600,2162,777],{"class":677},[600,2164,780],{"class":681},[493,2166,1931,2167,2169],{"color":495,"icon":13},[482,2168,90],{"href":95}," docs for all available drain adapters.",[578,2171,2173],{"id":2172},"next-steps","Next Steps",[457,2175,2176,2181,2186,2191],{},[460,2177,2178,2180],{},[482,2179,46],{"href":47},": Design comprehensive events with context layering",[460,2182,2183,2185],{},[482,2184,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[460,2187,2188,2190],{},[482,2189,61],{"href":62},": Control log volume with head and tail sampling",[460,2192,2193,2195,2196,2199,2200,2203,2204,2207],{},[482,2194,51],{"href":52},": Throw errors with ",[444,2197,2198],{},"why",", ",[444,2201,2202],{},"fix",", and ",[444,2205,2206],{},"link"," fields",[2209,2210,2211],"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":596,"searchDepth":700,"depth":700,"links":2213},[2214,2219,2220,2221,2222,2223],{"id":580,"depth":700,"text":25,"children":2215},[2216,2217,2218],{"id":584,"depth":726,"text":585},{"id":659,"depth":726,"text":660},{"id":1103,"depth":726,"text":1104},{"id":1215,"depth":700,"text":46},{"id":1538,"depth":700,"text":1539},{"id":1928,"depth":700,"text":409},{"id":1941,"depth":700,"text":1942},{"id":2172,"depth":700,"text":2173},"Wide events and structured errors in Astro server middleware.","md",null,{},{"title":226,"icon":229},{"title":226,"description":2224},"HYExefMiyBQ-zZNtAaxkjKWL_3ETIIAt_-haBiR6V6Q",[2232,2234],{"title":222,"path":223,"stem":224,"description":2233,"icon":74,"children":-1},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.",{"title":231,"path":232,"stem":233,"description":2235,"icon":234,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.",1778444366249]