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