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