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