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