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