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