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