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