[{"data":1,"prerenderedAt":2650},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-self-hosted-memory":434,"-integrate-adapters-self-hosted-memory-surround":2645},[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":2633,"extension":2634,"links":2635,"meta":2641,"navigation":2642,"path":154,"seo":2643,"stem":155,"__hash__":2644},"docs\u002F3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory.md","Memory Adapter",{"type":438,"value":439,"toc":2616},"minimark",[440,459,466,512,516,519,568,571,1353,1357,1360,1499,1508,1511,1515,1581,1646,1650,1653,1830,1834,1842,2129,2135,2242,2246,2249,2427,2431,2441,2450,2461,2465,2468,2581,2585,2612],[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],{},"Expose a route so agents can retrieve structured logs during a local dev session:",[520,1361,1364],{"className":522,"code":1362,"filename":1363,"language":525,"meta":526,"style":526},"import { readMemoryLogs } 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({ limit: 200 }))\n  })\n}\n","src\u002Findex.ts (Hono)",[455,1365,1366,1384,1388,1393,1426,1455,1487,1494],{"__ignoreMap":526},[530,1367,1368,1370,1372,1374,1376,1378,1380,1382],{"class":532,"line":533},[530,1369,537],{"class":536},[530,1371,541],{"class":540},[530,1373,551],{"class":544},[530,1375,554],{"class":540},[530,1377,557],{"class":536},[530,1379,560],{"class":540},[530,1381,564],{"class":563},[530,1383,567],{"class":540},[530,1385,1386],{"class":532,"line":588},[530,1387,657],{"emptyLinePlaceholder":656},[530,1389,1390],{"class":532,"line":609},[530,1391,1392],{"class":584},"\u002F\u002F Restrict to dev — agents hit this endpoint to retrieve logs\n",[530,1394,1395,1398,1401,1403,1406,1408,1411,1414,1416,1419,1421,1424],{"class":532,"line":630},[530,1396,1397],{"class":536},"if",[530,1399,1400],{"class":544}," (process",[530,1402,693],{"class":540},[530,1404,1405],{"class":544},"env",[530,1407,693],{"class":540},[530,1409,1410],{"class":544},"NODE_ENV ",[530,1412,1413],{"class":540},"!==",[530,1415,560],{"class":540},[530,1417,1418],{"class":563},"production",[530,1420,751],{"class":540},[530,1422,1423],{"class":544},") ",[530,1425,988],{"class":540},[530,1427,1428,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453],{"class":532,"line":653},[530,1429,1430],{"class":544},"  app",[530,1432,693],{"class":540},[530,1434,746],{"class":676},[530,1436,699],{"class":710},[530,1438,751],{"class":540},[530,1440,754],{"class":563},[530,1442,751],{"class":540},[530,1444,548],{"class":540},[530,1446,761],{"class":540},[530,1448,765],{"class":764},[530,1450,768],{"class":540},[530,1452,771],{"class":663},[530,1454,774],{"class":540},[530,1456,1457,1460,1462,1464,1466,1468,1470,1472,1474,1477,1479,1483,1485],{"class":532,"line":660},[530,1458,1459],{"class":536},"    return",[530,1461,783],{"class":544},[530,1463,693],{"class":540},[530,1465,788],{"class":676},[530,1467,699],{"class":710},[530,1469,793],{"class":676},[530,1471,699],{"class":710},[530,1473,707],{"class":540},[530,1475,1476],{"class":710}," limit",[530,1478,714],{"class":540},[530,1480,1482],{"class":1481},"sbssI"," 200",[530,1484,554],{"class":540},[530,1486,725],{"class":710},[530,1488,1489,1492],{"class":532,"line":682},[530,1490,1491],{"class":540},"  }",[530,1493,804],{"class":710},[530,1495,1496],{"class":532,"line":687},[530,1497,1498],{"class":540},"}\n",[441,1500,1501,1502,1507],{},"The response is a JSON array of ",[445,1503,1504],{"href":410},[455,1505,1506],{},"WideEvent"," objects — the same shape used by every other evlog adapter.",[513,1509,409],{"id":1510},"configuration",[1512,1513,269],"h3",{"id":1514},"options",[1516,1517,1518,1537],"table",{},[1519,1520,1521],"thead",{},[1522,1523,1524,1528,1531,1534],"tr",{},[1525,1526,1527],"th",{},"Option",[1525,1529,1530],{},"Type",[1525,1532,1533],{},"Default",[1525,1535,1536],{},"Description",[1538,1539,1540,1561],"tbody",{},[1522,1541,1542,1548,1553,1558],{},[1543,1544,1545],"td",{},[455,1546,1547],{},"maxEvents",[1543,1549,1550],{},[455,1551,1552],{},"number",[1543,1554,1555],{},[455,1556,1557],{},"1000",[1543,1559,1560],{},"Maximum events to keep in the ring buffer (oldest are dropped)",[1522,1562,1563,1568,1573,1578],{},[1543,1564,1565],{},[455,1566,1567],{},"store",[1543,1569,1570],{},[455,1571,1572],{},"string",[1543,1574,1575],{},[455,1576,1577],{},"'default'",[1543,1579,1580],{},"Named buffer key — multiple drains sharing the same key share the same buffer",[520,1582,1585],{"className":522,"code":1583,"filename":1584,"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,1586,1587,1592,1613,1617,1622],{"__ignoreMap":526},[530,1588,1589],{"class":532,"line":533},[530,1590,1591],{"class":584},"\u002F\u002F Keep only the last 500 events\n",[530,1593,1594,1597,1599,1601,1604,1606,1609,1611],{"class":532,"line":588},[530,1595,1596],{"class":676},"createMemoryDrain",[530,1598,699],{"class":544},[530,1600,707],{"class":540},[530,1602,1603],{"class":710}," maxEvents",[530,1605,714],{"class":540},[530,1607,1608],{"class":1481}," 500",[530,1610,554],{"class":540},[530,1612,804],{"class":544},[530,1614,1615],{"class":532,"line":609},[530,1616,657],{"emptyLinePlaceholder":656},[530,1618,1619],{"class":532,"line":630},[530,1620,1621],{"class":584},"\u002F\u002F Use a named store for isolation\n",[530,1623,1624,1626,1628,1630,1633,1635,1637,1640,1642,1644],{"class":532,"line":653},[530,1625,1596],{"class":676},[530,1627,699],{"class":544},[530,1629,707],{"class":540},[530,1631,1632],{"class":710}," store",[530,1634,714],{"class":540},[530,1636,560],{"class":540},[530,1638,1639],{"class":563},"my-service",[530,1641,751],{"class":540},[530,1643,554],{"class":540},[530,1645,804],{"class":544},[1512,1647,1649],{"id":1648},"named-stores","Named Stores",[441,1651,1652],{},"Use named stores to isolate events from different services or for testing:",[520,1654,1656],{"className":522,"code":1655,"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 apiBrain = 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,1657,1658,1685,1689,1694,1724,1754,1758,1763,1806,1810,1815],{"__ignoreMap":526},[530,1659,1660,1662,1664,1666,1668,1670,1672,1675,1677,1679,1681,1683],{"class":532,"line":533},[530,1661,537],{"class":536},[530,1663,541],{"class":540},[530,1665,545],{"class":544},[530,1667,548],{"class":540},[530,1669,551],{"class":544},[530,1671,548],{"class":540},[530,1673,1674],{"class":544}," clearMemoryLogs",[530,1676,554],{"class":540},[530,1678,557],{"class":536},[530,1680,560],{"class":540},[530,1682,564],{"class":563},[530,1684,567],{"class":540},[530,1686,1687],{"class":532,"line":588},[530,1688,657],{"emptyLinePlaceholder":656},[530,1690,1691],{"class":532,"line":609},[530,1692,1693],{"class":584},"\u002F\u002F Two separate buffers\n",[530,1695,1696,1698,1701,1703,1705,1707,1709,1711,1713,1715,1718,1720,1722],{"class":532,"line":630},[530,1697,664],{"class":663},[530,1699,1700],{"class":544}," authDrain ",[530,1702,670],{"class":540},[530,1704,545],{"class":676},[530,1706,699],{"class":544},[530,1708,707],{"class":540},[530,1710,1632],{"class":710},[530,1712,714],{"class":540},[530,1714,560],{"class":540},[530,1716,1717],{"class":563},"auth",[530,1719,751],{"class":540},[530,1721,554],{"class":540},[530,1723,804],{"class":544},[530,1725,1726,1728,1731,1733,1735,1737,1739,1741,1743,1745,1748,1750,1752],{"class":532,"line":653},[530,1727,664],{"class":663},[530,1729,1730],{"class":544}," apiBrain ",[530,1732,670],{"class":540},[530,1734,545],{"class":676},[530,1736,699],{"class":544},[530,1738,707],{"class":540},[530,1740,1632],{"class":710},[530,1742,714],{"class":540},[530,1744,560],{"class":540},[530,1746,1747],{"class":563},"api",[530,1749,751],{"class":540},[530,1751,554],{"class":540},[530,1753,804],{"class":544},[530,1755,1756],{"class":532,"line":660},[530,1757,657],{"emptyLinePlaceholder":656},[530,1759,1760],{"class":532,"line":682},[530,1761,1762],{"class":584},"\u002F\u002F Read from a specific store\n",[530,1764,1765,1767,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1793,1795,1797,1800,1802,1804],{"class":532,"line":687},[530,1766,664],{"class":663},[530,1768,1769],{"class":544}," authErrors ",[530,1771,670],{"class":540},[530,1773,551],{"class":676},[530,1775,699],{"class":544},[530,1777,707],{"class":540},[530,1779,1632],{"class":710},[530,1781,714],{"class":540},[530,1783,560],{"class":540},[530,1785,1717],{"class":563},[530,1787,751],{"class":540},[530,1789,548],{"class":540},[530,1791,1792],{"class":710}," level",[530,1794,714],{"class":540},[530,1796,560],{"class":540},[530,1798,1799],{"class":563},"error",[530,1801,751],{"class":540},[530,1803,554],{"class":540},[530,1805,804],{"class":544},[530,1807,1808],{"class":532,"line":728},[530,1809,657],{"emptyLinePlaceholder":656},[530,1811,1812],{"class":532,"line":733},[530,1813,1814],{"class":584},"\u002F\u002F Clear a store (useful in tests)\n",[530,1816,1817,1820,1822,1824,1826,1828],{"class":532,"line":739},[530,1818,1819],{"class":676},"clearMemoryLogs",[530,1821,699],{"class":544},[530,1823,751],{"class":540},[530,1825,1717],{"class":563},[530,1827,751],{"class":540},[530,1829,804],{"class":544},[513,1831,1833],{"id":1832},"querying","Querying",[441,1835,1836,1838,1839,714],{},[455,1837,793],{}," supports the same filtering options as ",[455,1840,1841],{},"readFsLogs",[520,1843,1845],{"className":522,"code":1844,"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,1846,1847,1865,1869,1874,1887,1891,1896,1925,1929,1934,1949,1992,1998,2002,2008,2024,2084,2091,2096,2102],{"__ignoreMap":526},[530,1848,1849,1851,1853,1855,1857,1859,1861,1863],{"class":532,"line":533},[530,1850,537],{"class":536},[530,1852,541],{"class":540},[530,1854,551],{"class":544},[530,1856,554],{"class":540},[530,1858,557],{"class":536},[530,1860,560],{"class":540},[530,1862,564],{"class":563},[530,1864,567],{"class":540},[530,1866,1867],{"class":532,"line":588},[530,1868,657],{"emptyLinePlaceholder":656},[530,1870,1871],{"class":532,"line":609},[530,1872,1873],{"class":584},"\u002F\u002F All events\n",[530,1875,1876,1878,1881,1883,1885],{"class":532,"line":630},[530,1877,664],{"class":663},[530,1879,1880],{"class":544}," all ",[530,1882,670],{"class":540},[530,1884,551],{"class":676},[530,1886,679],{"class":544},[530,1888,1889],{"class":532,"line":653},[530,1890,657],{"emptyLinePlaceholder":656},[530,1892,1893],{"class":532,"line":660},[530,1894,1895],{"class":584},"\u002F\u002F Errors only\n",[530,1897,1898,1900,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923],{"class":532,"line":682},[530,1899,664],{"class":663},[530,1901,1902],{"class":544}," errors ",[530,1904,670],{"class":540},[530,1906,551],{"class":676},[530,1908,699],{"class":544},[530,1910,707],{"class":540},[530,1912,1792],{"class":710},[530,1914,714],{"class":540},[530,1916,560],{"class":540},[530,1918,1799],{"class":563},[530,1920,751],{"class":540},[530,1922,554],{"class":540},[530,1924,804],{"class":544},[530,1926,1927],{"class":532,"line":687},[530,1928,657],{"emptyLinePlaceholder":656},[530,1930,1931],{"class":532,"line":728},[530,1932,1933],{"class":584},"\u002F\u002F Last 10 minutes\n",[530,1935,1936,1938,1941,1943,1945,1947],{"class":532,"line":733},[530,1937,664],{"class":663},[530,1939,1940],{"class":544}," recent ",[530,1942,670],{"class":540},[530,1944,551],{"class":676},[530,1946,699],{"class":544},[530,1948,988],{"class":540},[530,1950,1951,1954,1956,1958,1961,1964,1966,1969,1971,1974,1977,1980,1983,1985,1988,1990],{"class":532,"line":739},[530,1952,1953],{"class":710},"  since",[530,1955,714],{"class":540},[530,1957,673],{"class":540},[530,1959,1960],{"class":676}," Date",[530,1962,1963],{"class":544},"(Date",[530,1965,693],{"class":540},[530,1967,1968],{"class":676},"now",[530,1970,719],{"class":544},[530,1972,1973],{"class":540},"-",[530,1975,1976],{"class":1481}," 10",[530,1978,1979],{"class":540}," *",[530,1981,1982],{"class":1481}," 60",[530,1984,1979],{"class":540},[530,1986,1987],{"class":1481}," 1000",[530,1989,768],{"class":544},[530,1991,1005],{"class":540},[530,1993,1994,1996],{"class":532,"line":777},[530,1995,722],{"class":540},[530,1997,804],{"class":544},[530,1999,2000],{"class":532,"line":799},[530,2001,657],{"emptyLinePlaceholder":656},[530,2003,2005],{"class":532,"line":2004},14,[530,2006,2007],{"class":584},"\u002F\u002F Custom predicate\n",[530,2009,2011,2013,2016,2018,2020,2022],{"class":532,"line":2010},15,[530,2012,664],{"class":663},[530,2014,2015],{"class":544}," slow ",[530,2017,670],{"class":540},[530,2019,551],{"class":676},[530,2021,699],{"class":544},[530,2023,988],{"class":540},[530,2025,2027,2030,2032,2035,2037,2040,2042,2044,2047,2050,2052,2054,2056,2059,2061,2063,2066,2068,2071,2073,2075,2078,2080,2082],{"class":532,"line":2026},16,[530,2028,2029],{"class":676},"  filter",[530,2031,714],{"class":540},[530,2033,2034],{"class":764}," e",[530,2036,771],{"class":663},[530,2038,2039],{"class":540}," typeof",[530,2041,2034],{"class":544},[530,2043,693],{"class":540},[530,2045,2046],{"class":544},"duration ",[530,2048,2049],{"class":540},"===",[530,2051,560],{"class":540},[530,2053,1572],{"class":563},[530,2055,751],{"class":540},[530,2057,2058],{"class":540}," &&",[530,2060,2034],{"class":544},[530,2062,693],{"class":540},[530,2064,2065],{"class":544},"duration",[530,2067,693],{"class":540},[530,2069,2070],{"class":676},"endsWith",[530,2072,699],{"class":544},[530,2074,751],{"class":540},[530,2076,2077],{"class":563},"s",[530,2079,751],{"class":540},[530,2081,768],{"class":544},[530,2083,1005],{"class":540},[530,2085,2087,2089],{"class":532,"line":2086},17,[530,2088,722],{"class":540},[530,2090,804],{"class":544},[530,2092,2094],{"class":532,"line":2093},18,[530,2095,657],{"emptyLinePlaceholder":656},[530,2097,2099],{"class":532,"line":2098},19,[530,2100,2101],{"class":584},"\u002F\u002F Most recent 50 events\n",[530,2103,2105,2107,2110,2112,2114,2116,2118,2120,2122,2125,2127],{"class":532,"line":2104},20,[530,2106,664],{"class":663},[530,2108,2109],{"class":544}," latest ",[530,2111,670],{"class":540},[530,2113,551],{"class":676},[530,2115,699],{"class":544},[530,2117,707],{"class":540},[530,2119,1476],{"class":710},[530,2121,714],{"class":540},[530,2123,2124],{"class":1481}," 50",[530,2126,554],{"class":540},[530,2128,804],{"class":544},[1512,2130,2132,2134],{"id":2131},"readmemorylogs-options",[455,2133,793],{}," Options",[1516,2136,2137,2147],{},[1519,2138,2139],{},[1522,2140,2141,2143,2145],{},[1525,2142,1527],{},[1525,2144,1530],{},[1525,2146,1536],{},[1538,2148,2149,2164,2182,2198,2213,2228],{},[1522,2150,2151,2155,2159],{},[1543,2152,2153],{},[455,2154,1567],{},[1543,2156,2157],{},[455,2158,1572],{},[1543,2160,2161,2162,768],{},"Named store to read from (default: ",[455,2163,1577],{},[1522,2165,2166,2171,2176],{},[1543,2167,2168],{},[455,2169,2170],{},"since",[1543,2172,2173],{},[455,2174,2175],{},"Date | string",[1543,2177,2178,2179],{},"Only events with ",[455,2180,2181],{},"timestamp >= since",[1522,2183,2184,2189,2193],{},[1543,2185,2186],{},[455,2187,2188],{},"until",[1543,2190,2191],{},[455,2192,2175],{},[1543,2194,2178,2195],{},[455,2196,2197],{},"timestamp \u003C= until",[1522,2199,2200,2205,2210],{},[1543,2201,2202],{},[455,2203,2204],{},"level",[1543,2206,2207],{},[455,2208,2209],{},"LogLevel | LogLevel[]",[1543,2211,2212],{},"Filter by level",[1522,2214,2215,2220,2225],{},[1543,2216,2217],{},[455,2218,2219],{},"filter",[1543,2221,2222],{},[455,2223,2224],{},"(event) => boolean",[1543,2226,2227],{},"Custom predicate",[1522,2229,2230,2235,2239],{},[1543,2231,2232],{},[455,2233,2234],{},"limit",[1543,2236,2237],{},[455,2238,1552],{},[1543,2240,2241],{},"Return at most N most-recent matching events",[513,2243,2245],{"id":2244},"combining-with-network-drains","Combining with Network Drains",[441,2247,2248],{},"Use the memory adapter locally while sending to an observability platform in production:",[520,2250,2252],{"className":522,"code":2251,"filename":1584,"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,2253,2254,2272,2292,2296,2309,2322,2326,2349,2382,2396,2405,2418,2423],{"__ignoreMap":526},[530,2255,2256,2258,2260,2262,2264,2266,2268,2270],{"class":532,"line":533},[530,2257,537],{"class":536},[530,2259,541],{"class":540},[530,2261,545],{"class":544},[530,2263,554],{"class":540},[530,2265,557],{"class":536},[530,2267,560],{"class":540},[530,2269,564],{"class":563},[530,2271,567],{"class":540},[530,2273,2274,2276,2278,2281,2283,2285,2287,2290],{"class":532,"line":588},[530,2275,537],{"class":536},[530,2277,541],{"class":540},[530,2279,2280],{"class":544}," createAxiomDrain",[530,2282,554],{"class":540},[530,2284,557],{"class":536},[530,2286,560],{"class":540},[530,2288,2289],{"class":563},"evlog\u002Faxiom",[530,2291,567],{"class":540},[530,2293,2294],{"class":532,"line":609},[530,2295,657],{"emptyLinePlaceholder":656},[530,2297,2298,2300,2303,2305,2307],{"class":532,"line":630},[530,2299,664],{"class":663},[530,2301,2302],{"class":544}," memory ",[530,2304,670],{"class":540},[530,2306,545],{"class":676},[530,2308,679],{"class":544},[530,2310,2311,2313,2316,2318,2320],{"class":532,"line":653},[530,2312,664],{"class":663},[530,2314,2315],{"class":544}," axiom ",[530,2317,670],{"class":540},[530,2319,2280],{"class":676},[530,2321,679],{"class":544},[530,2323,2324],{"class":532,"line":660},[530,2325,657],{"emptyLinePlaceholder":656},[530,2327,2328,2330,2333,2335,2338,2340,2343,2345,2347],{"class":532,"line":682},[530,2329,664],{"class":663},[530,2331,2332],{"class":544}," drain ",[530,2334,670],{"class":540},[530,2336,2337],{"class":663}," async",[530,2339,761],{"class":540},[530,2341,2342],{"class":764},"ctx",[530,2344,768],{"class":540},[530,2346,771],{"class":663},[530,2348,774],{"class":540},[530,2350,2351,2354,2356,2359,2361,2363,2365,2368,2371,2373,2376,2378,2380],{"class":532,"line":687},[530,2352,2353],{"class":536},"  if",[530,2355,761],{"class":710},[530,2357,2358],{"class":544},"process",[530,2360,693],{"class":540},[530,2362,1405],{"class":544},[530,2364,693],{"class":540},[530,2366,2367],{"class":544},"NODE_ENV",[530,2369,2370],{"class":540}," ===",[530,2372,560],{"class":540},[530,2374,2375],{"class":563},"development",[530,2377,751],{"class":540},[530,2379,1423],{"class":710},[530,2381,988],{"class":540},[530,2383,2384,2387,2390,2392,2394],{"class":532,"line":728},[530,2385,2386],{"class":536},"    await",[530,2388,2389],{"class":676}," memory",[530,2391,699],{"class":710},[530,2393,2342],{"class":544},[530,2395,804],{"class":710},[530,2397,2398,2400,2403],{"class":532,"line":733},[530,2399,1491],{"class":540},[530,2401,2402],{"class":536}," else",[530,2404,774],{"class":540},[530,2406,2407,2409,2412,2414,2416],{"class":532,"line":739},[530,2408,2386],{"class":536},[530,2410,2411],{"class":676}," axiom",[530,2413,699],{"class":710},[530,2415,2342],{"class":544},[530,2417,804],{"class":710},[530,2419,2420],{"class":532,"line":777},[530,2421,2422],{"class":540},"  }\n",[530,2424,2425],{"class":532,"line":799},[530,2426,1498],{"class":540},[513,2428,2430],{"id":2429},"ring-buffer-behaviour","Ring Buffer Behaviour",[441,2432,2433,2434,2437,2438,2440],{},"The buffer is ",[450,2435,2436],{},"bounded",": once it reaches ",[455,2439,1547],{},", 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,2442,2448],{"className":2443,"code":2445,"filename":2446,"language":2447,"meta":526},[2444],"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,2449,2445],{"__ignoreMap":526},[2451,2452,2455,2456,2458,2459,693],"callout",{"color":2453,"icon":2454},"warning","i-lucide-triangle-alert","The in-memory buffer is lost when the worker\u002Fprocess restarts. For persistent storage, use the ",[445,2457,447],{"href":144}," (Node-based runtimes) or ",[445,2460,148],{"href":149},[513,2462,2464],{"id":2463},"direct-api-usage","Direct API Usage",[441,2466,2467],{},"For advanced use cases, call the underlying helpers directly:",[520,2469,2471],{"className":522,"code":2470,"filename":524,"language":525,"meta":526,"style":526},"import { writeToMemory, readMemoryLogs, clearMemoryLogs } 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 Reset for tests\nclearMemoryLogs()\n",[455,2472,2473,2500,2504,2509,2544,2548,2553,2566,2570,2575],{"__ignoreMap":526},[530,2474,2475,2477,2479,2482,2484,2486,2488,2490,2492,2494,2496,2498],{"class":532,"line":533},[530,2476,537],{"class":536},[530,2478,541],{"class":540},[530,2480,2481],{"class":544}," writeToMemory",[530,2483,548],{"class":540},[530,2485,551],{"class":544},[530,2487,548],{"class":540},[530,2489,1674],{"class":544},[530,2491,554],{"class":540},[530,2493,557],{"class":536},[530,2495,560],{"class":540},[530,2497,564],{"class":563},[530,2499,567],{"class":540},[530,2501,2502],{"class":532,"line":588},[530,2503,657],{"emptyLinePlaceholder":656},[530,2505,2506],{"class":532,"line":609},[530,2507,2508],{"class":584},"\u002F\u002F Write events directly (skips the drain pipeline)\n",[530,2510,2511,2514,2517,2519,2521,2523,2525,2527,2530,2532,2534,2536,2538,2540,2542],{"class":532,"line":630},[530,2512,2513],{"class":676},"writeToMemory",[530,2515,2516],{"class":544},"([event]",[530,2518,548],{"class":540},[530,2520,541],{"class":540},[530,2522,1632],{"class":710},[530,2524,714],{"class":540},[530,2526,560],{"class":540},[530,2528,2529],{"class":563},"default",[530,2531,751],{"class":540},[530,2533,548],{"class":540},[530,2535,1603],{"class":710},[530,2537,714],{"class":540},[530,2539,1987],{"class":1481},[530,2541,554],{"class":540},[530,2543,804],{"class":544},[530,2545,2546],{"class":532,"line":653},[530,2547,657],{"emptyLinePlaceholder":656},[530,2549,2550],{"class":532,"line":660},[530,2551,2552],{"class":584},"\u002F\u002F Read the current buffer\n",[530,2554,2555,2557,2560,2562,2564],{"class":532,"line":682},[530,2556,664],{"class":663},[530,2558,2559],{"class":544}," events ",[530,2561,670],{"class":540},[530,2563,551],{"class":676},[530,2565,679],{"class":544},[530,2567,2568],{"class":532,"line":687},[530,2569,657],{"emptyLinePlaceholder":656},[530,2571,2572],{"class":532,"line":728},[530,2573,2574],{"class":584},"\u002F\u002F Reset for tests\n",[530,2576,2577,2579],{"class":532,"line":733},[530,2578,1819],{"class":676},[530,2580,679],{"class":544},[513,2582,2584],{"id":2583},"next-steps","Next Steps",[2586,2587,2588,2594,2600,2606],"ul",{},[478,2589,2590,2593],{},[445,2591,2592],{"href":144},"File System Adapter"," - Persistent local logs for Node-based runtimes",[478,2595,2596,2599],{},[445,2597,2598],{"href":149},"NuxtHub Adapter"," - Database-backed storage for Cloudflare D1",[478,2601,2602,2605],{},[445,2603,2604],{"href":400},"Pipeline"," - Add batching and retry to any drain",[478,2607,2608,2611],{},[445,2609,2610],{"href":395},"Custom Adapters"," - Build your own adapter",[2613,2614,2615],"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":2617},[2618,2619,2620,2621,2625,2629,2630,2631,2632],{"id":515,"depth":588,"text":20},{"id":570,"depth":588,"text":25},{"id":1355,"depth":588,"text":1356},{"id":1510,"depth":588,"text":409,"children":2622},[2623,2624],{"id":1514,"depth":609,"text":269},{"id":1648,"depth":609,"text":1649},{"id":1832,"depth":588,"text":1833,"children":2626},[2627],{"id":2131,"depth":609,"text":2628},"readMemoryLogs Options",{"id":2244,"depth":588,"text":2245},{"id":2429,"depth":588,"text":2430},{"id":2463,"depth":588,"text":2464},{"id":2583,"depth":588,"text":2584},"Store wide events in an in-memory ring buffer. Works in any runtime — including Cloudflare Workers (workerd) — where the file system is unavailable.","md",[2636,2639],{"label":2592,"icon":146,"to":144,"color":2637,"variant":2638},"neutral","subtle",{"label":2640,"icon":28,"to":203,"color":2637,"variant":2638},"Hono Integration",{},{"title":153,"icon":156},{"title":436,"description":2633},"l9sUnNbYmDK3BkRhbq96f3E3ZmXWWglcjA6d74QUTu0",[2646,2648],{"title":148,"path":149,"stem":150,"description":2647,"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":2649,"icon":165,"children":-1},"evlog supports every major TypeScript framework. Choose your stack and get started in minutes.",1779626710088]