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