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