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