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