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