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