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