[{"data":1,"prerenderedAt":2971},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-self-hosted-memory":529,"-integrate-adapters-self-hosted-memory-surround":2966},[4,29,76,122,304,436,495],{"title":5,"path":6,"stem":7,"children":8,"page":28},"Start","\u002Fstart","1.start",[9,13,18,23],{"title":10,"path":11,"stem":12},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction",{"title":14,"path":15,"stem":16,"icon":17},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":19,"path":20,"stem":21,"icon":22},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":24,"path":25,"stem":26,"icon":27},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":30,"path":31,"stem":32,"children":33,"page":28},"Learn","\u002Flearn","2.learn",[34,38,43,48,53,58,62,67,72],{"title":35,"path":36,"stem":37},"Learn evlog","\u002Flearn\u002Foverview","2.learn\u002F0.overview",{"title":39,"path":40,"stem":41,"icon":42},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":44,"path":45,"stem":46,"icon":47},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":49,"path":50,"stem":51,"icon":52},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":54,"path":55,"stem":56,"icon":57},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":59,"path":60,"stem":61},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling",{"title":63,"path":64,"stem":65,"icon":66},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":68,"path":69,"stem":70,"icon":71},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":73,"path":74,"stem":75},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs",{"title":77,"path":78,"stem":79,"children":80,"page":28},"CLI","\u002Fcli","3.cli",[81,85,90,95,99,103,108,113,118],{"title":82,"path":83,"stem":84},"evlog CLI","\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":86,"path":87,"stem":88,"icon":89},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":91,"path":92,"stem":93,"icon":94},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":96,"path":97,"stem":98},"Map rules","\u002Fcli\u002Frules","3.cli\u002F3.rules",{"title":100,"path":101,"stem":102},"Map scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring",{"title":104,"path":105,"stem":106,"icon":107},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":109,"path":110,"stem":111,"icon":112},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":114,"path":115,"stem":116,"icon":117},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":119,"path":120,"stem":121},"evlog agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents",{"title":123,"path":124,"stem":125,"children":126,"page":28},"Integrate","\u002Fintegrate","4.integrate",[127,132,216],{"title":128,"path":129,"stem":130,"icon":131},"Overview","\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":28},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,141,171,196],{"title":128,"path":138,"stem":139,"icon":140},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview","i-lucide-list",{"title":142,"path":143,"stem":144,"children":145,"page":28},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[146,151,156,161,166],{"title":147,"path":148,"stem":149,"icon":150},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":152,"path":153,"stem":154,"icon":155},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":157,"path":158,"stem":159,"icon":160},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":162,"path":163,"stem":164,"icon":165},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":167,"path":168,"stem":169,"icon":170},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":172,"path":173,"stem":174,"children":175,"page":28},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[176,181,186,191],{"title":177,"path":178,"stem":179,"icon":180},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":182,"path":183,"stem":184,"icon":185},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":187,"path":188,"stem":189,"icon":190},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":192,"path":193,"stem":194,"icon":195},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":197,"path":198,"stem":199,"children":200,"page":28},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[201,206,211],{"title":202,"path":203,"stem":204,"icon":205},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":207,"path":208,"stem":209,"icon":210},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":212,"path":213,"stem":214,"icon":215},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":217,"path":218,"stem":219,"children":220,"page":28},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[221,225,230,235,240,245,250,255,260,265,270,275,280,285,289,294,299],{"title":128,"path":222,"stem":223,"icon":224},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":226,"path":227,"stem":228,"icon":229},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":231,"path":232,"stem":233,"icon":234},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":236,"path":237,"stem":238,"icon":239},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":241,"path":242,"stem":243,"icon":244},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":246,"path":247,"stem":248,"icon":249},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":251,"path":252,"stem":253,"icon":254},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":256,"path":257,"stem":258,"icon":259},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":261,"path":262,"stem":263,"icon":264},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":266,"path":267,"stem":268,"icon":269},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":271,"path":272,"stem":273,"icon":274},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":276,"path":277,"stem":278,"icon":279},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":281,"path":282,"stem":283,"icon":284},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":286,"path":287,"stem":288,"icon":71},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":290,"path":291,"stem":292,"icon":293},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":295,"path":296,"stem":297,"icon":298},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":300,"path":301,"stem":302,"icon":303},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":305,"path":306,"stem":307,"children":308,"page":28},"Use Cases","\u002Fuse-cases","5.use-cases",[309,312,317,346,374,407,427,432],{"title":305,"path":310,"stem":311},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":313,"path":314,"stem":315,"icon":316},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":318,"icon":319,"path":320,"stem":321,"children":322,"page":28},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[323,326,331,336,341],{"title":128,"path":324,"stem":325,"icon":140},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":327,"path":328,"stem":329,"icon":330},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":332,"path":333,"stem":334,"icon":335},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":337,"path":338,"stem":339,"icon":340},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":342,"path":343,"stem":344,"icon":345},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":28},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[352,355,360,365,369],{"title":128,"path":353,"stem":354,"icon":140},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":356,"path":357,"stem":358,"icon":359},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":361,"path":362,"stem":363,"icon":364},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":366,"path":367,"stem":368,"icon":316},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":370,"path":371,"stem":372,"icon":373},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":375,"icon":376,"path":377,"stem":378,"children":379,"page":28},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[380,383,388,393,398,402],{"title":128,"path":381,"stem":382,"icon":140},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":384,"path":385,"stem":386,"icon":387},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":389,"path":390,"stem":391,"icon":392},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":394,"path":395,"stem":396,"icon":397},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":376},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":403,"path":404,"stem":405,"icon":406},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes","i-lucide-book-open",{"title":342,"icon":373,"path":408,"stem":409,"children":410,"page":28},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[411,414,419,423],{"title":128,"path":412,"stem":413,"icon":140},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":415,"path":416,"stem":417,"icon":418},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":420,"path":421,"stem":422},"Telemetry Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest",{"title":424,"path":425,"stem":426,"icon":406},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":428,"path":429,"stem":430,"icon":431},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":433,"path":434,"stem":435},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":437,"path":438,"stem":439,"children":440,"page":28},"Extend","\u002Fextend","6.extend",[441,445,450,455,459,464,468,472,476,481,486,491],{"title":128,"path":442,"stem":443,"icon":444},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":446,"path":447,"stem":448,"icon":449},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":451,"path":452,"stem":453,"icon":454},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":456,"path":457,"stem":458,"icon":449},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":460,"path":461,"stem":462,"icon":463},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":465,"stem":466,"icon":467},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":469,"path":470,"stem":471},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":473,"path":474,"stem":475,"icon":431},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":477,"path":478,"stem":479,"icon":480},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling","i-lucide-filter",{"title":482,"path":483,"stem":484,"icon":485},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":487,"path":488,"stem":489,"icon":490},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":492,"path":493,"stem":494},"Drain Pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline",{"title":424,"path":496,"stem":497,"children":498,"page":28},"\u002Freference","7.reference",[499,504,507,512,516,521,525],{"title":500,"path":501,"stem":502,"icon":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":370,"path":505,"stem":506,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":508,"path":509,"stem":510,"icon":511},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":513,"path":514,"stem":515,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":517,"path":518,"stem":519,"icon":520},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":522,"path":523,"stem":524,"icon":431},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":526,"path":527,"stem":528},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":530,"title":531,"body":532,"description":2954,"extension":2955,"links":2956,"meta":2962,"navigation":2963,"path":213,"seo":2964,"stem":214,"__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":203},"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":215},"[\"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,19],"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,24],{"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":231,"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":256,"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":266,"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":271,"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":251,"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":286,"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":501},[550,1640,1641],{},"WideEvent"," objects, the same shape used by every other evlog adapter.",[608,1644,500],{"id":1645},"configuration",[1647,1648,332],"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":203}," (Node-based runtimes) or ",[540,2616,207],{"href":208},[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":203},"File System Adapter"," - Persistent local logs for Node-based runtimes",[573,2912,2913,2916],{},[540,2914,2915],{"href":208},"NuxtHub Adapter"," - Database-backed storage for Cloudflare D1",[573,2918,2919,2922],{},[540,2920,2921],{"href":493},"Pipeline"," - Add batching and retry to any drain",[573,2924,2925,2928],{},[540,2926,2927],{"href":488},"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":19},{"id":665,"depth":683,"text":24},{"id":1450,"depth":683,"text":1451},{"id":1645,"depth":683,"text":500,"children":2939},[2940,2941,2942],{"id":1649,"depth":704,"text":332},{"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":205,"to":203,"color":2958,"variant":2959},"neutral","subtle",{"label":2961,"icon":27,"to":262,"color":2958,"variant":2959},"Hono Integration",{},{"title":212,"icon":215},{"title":531,"description":2954},"SEO-2uFnOvqlPXQm_qQ9096fadjkKkZv4FBCE94o374",[2967,2969],{"title":207,"path":208,"stem":209,"description":2968,"icon":210,"children":-1},"Self-hosted retention using NuxtHub database storage. Store, query, and clean up your wide events with no external dependency.",{"title":128,"path":222,"stem":223,"description":2970,"icon":224,"children":-1},"evlog supports every major TypeScript framework. Choose your stack and get started in minutes.",1786799155024]