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