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