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