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