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