[{"data":1,"prerenderedAt":2021},["ShallowReactive",2],{"navigation_docs":3,"-adapters-self-hosted-fs":392,"-adapters-self-hosted-fs-surround":2016},[4,35,159,201,289,376],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Adapters","\u002Fadapters","6.adapters",[294,297,337,352],{"title":41,"path":295,"stem":296,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[302,307,312,317,322,327,332],{"title":303,"path":304,"stem":305,"icon":306},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":308,"path":309,"stem":310,"icon":311},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":313,"path":314,"stem":315,"icon":316},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":318,"path":319,"stem":320,"icon":321},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":323,"path":324,"stem":325,"icon":326},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":328,"path":329,"stem":330,"icon":331},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":333,"path":334,"stem":335,"icon":336},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":338,"path":339,"stem":340,"children":341,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[342,347],{"title":343,"path":344,"stem":345,"icon":346},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":348,"path":349,"stem":350,"icon":351},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[357,362,367,371],{"title":358,"path":359,"stem":360,"icon":361},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":363,"path":364,"stem":365,"icon":366},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":368,"path":369,"stem":370,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":372,"path":373,"stem":374,"icon":375},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":377,"path":378,"stem":379,"children":380,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[381,384,388],{"title":41,"path":382,"stem":383,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":385,"path":386,"stem":387,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":389,"path":390,"stem":391,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":393,"title":394,"body":395,"description":2001,"extension":2002,"links":2003,"meta":2012,"navigation":2013,"path":344,"seo":2014,"stem":345,"__hash__":2015},"docs\u002F6.adapters\u002F03.self-hosted\u002F01.fs.md","File System Adapter",{"type":396,"value":397,"toc":1981},"minimark",[398,402,434,480,484,487,530,533,536,1114,1120,1124,1133,1140,1158,1161,1165,1268,1272,1431,1435,1445,1452,1456,1465,1469,1472,1631,1635,1639,1658,1662,1745,1749,1802,1806,1809,1936,1940,1950,1954,1977],[399,400,401],"p",{},"The File System adapter writes your wide events to local NDJSON files (one JSON object per line, one file per day). This enables:",[403,404,405,418,428],"ul",{},[406,407,408,412,413,417],"li",{},[409,410,411],"strong",{},"AI agent integration"," - point a skill to ",[414,415,416],"code",{},".evlog\u002Flogs\u002F"," to parse structured logs for debugging and pattern analysis",[406,419,420,423,424,427],{},[409,421,422],{},"Local dev debugging"," - persistent log history without scrolling the terminal (",[414,425,426],{},"tail -f .evlog\u002Flogs\u002F2026-03-14.jsonl",")",[406,429,430,433],{},[409,431,432],{},"Production backup"," - combine with a network drain (Axiom, OTLP) for local fallback",[435,436,439,442,466],"prompt",{":actions":437,"description":438,"icon":346},"[\"copy\",\"cursor\",\"windsurf\"]","Add the file system drain adapter",[399,440,441],{},"Add the file system drain adapter to write evlog wide events locally as NDJSON files.",[443,444,445,448,451,454,457,460,463],"ol",{},[406,446,447],{},"Identify which framework I'm using and follow its evlog integration pattern",[406,449,450],{},"Install evlog if not already installed",[406,452,453],{},"Import createFsDrain from 'evlog\u002Ffs'",[406,455,456],{},"Wire createFsDrain() into my framework's drain configuration",[406,458,459],{},"Logs are written to .evlog\u002Flogs\u002F by default (one file per day, auto .gitignore)",[406,461,462],{},"Optionally configure dir, maxFiles, maxSizePerFile, or pretty options",[406,464,465],{},"Test by triggering a request and checking .evlog\u002Flogs\u002F*.jsonl",[399,467,468,469,475,476],{},"Adapter docs: ",[470,471,472],"a",{"href":472,"rel":473},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fself-hosted\u002Ffs",[474],"nofollow","\nFramework setup: ",[470,477,478],{"href":478,"rel":479},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks",[474],[481,482,15],"h2",{"id":483},"installation",[399,485,486],{},"The File System adapter comes bundled with evlog:",[488,489,495],"pre",{"className":490,"code":491,"filename":492,"language":493,"meta":494,"style":494},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createFsDrain } from 'evlog\u002Ffs'\n","src\u002Findex.ts","typescript","",[414,496,497],{"__ignoreMap":494},[498,499,502,506,510,514,517,520,523,527],"span",{"class":500,"line":501},"line",1,[498,503,505],{"class":504},"s7zQu","import",[498,507,509],{"class":508},"sMK4o"," {",[498,511,513],{"class":512},"sTEyZ"," createFsDrain",[498,515,516],{"class":508}," }",[498,518,519],{"class":504}," from",[498,521,522],{"class":508}," '",[498,524,526],{"class":525},"sfazB","evlog\u002Ffs",[498,528,529],{"class":508},"'\n",[481,531,20],{"id":532},"quick-start",[399,534,535],{},"No credentials or environment variables needed. Just wire the drain to your framework:",[537,538,539,653,784,846,900,959,1013,1066],"code-group",{},[488,540,543],{"className":490,"code":541,"filename":542,"language":493,"meta":494,"style":494},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nimport { createFsDrain } from 'evlog\u002Ffs'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createFsDrain())\n})\n","Nuxt \u002F Nitro",[414,544,545,551,570,577,608,644],{"__ignoreMap":494},[498,546,547],{"class":500,"line":501},[498,548,550],{"class":549},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[498,552,554,556,558,560,562,564,566,568],{"class":500,"line":553},2,[498,555,505],{"class":504},[498,557,509],{"class":508},[498,559,513],{"class":512},[498,561,516],{"class":508},[498,563,519],{"class":504},[498,565,522],{"class":508},[498,567,526],{"class":525},[498,569,529],{"class":508},[498,571,573],{"class":500,"line":572},3,[498,574,576],{"emptyLinePlaceholder":575},true,"\n",[498,578,580,583,586,590,593,595,599,601,605],{"class":500,"line":579},4,[498,581,582],{"class":504},"export",[498,584,585],{"class":504}," default",[498,587,589],{"class":588},"s2Zo4"," defineNitroPlugin",[498,591,592],{"class":512},"(",[498,594,592],{"class":508},[498,596,598],{"class":597},"sHdIc","nitroApp",[498,600,427],{"class":508},[498,602,604],{"class":603},"spNyl"," =>",[498,606,607],{"class":508}," {\n",[498,609,611,614,617,620,622,625,628,631,634,636,639,641],{"class":500,"line":610},5,[498,612,613],{"class":512},"  nitroApp",[498,615,616],{"class":508},".",[498,618,619],{"class":512},"hooks",[498,621,616],{"class":508},[498,623,624],{"class":588},"hook",[498,626,592],{"class":627},"swJcz",[498,629,630],{"class":508},"'",[498,632,633],{"class":525},"evlog:drain",[498,635,630],{"class":508},[498,637,638],{"class":508},",",[498,640,513],{"class":588},[498,642,643],{"class":627},"())\n",[498,645,647,650],{"class":500,"line":646},6,[498,648,649],{"class":508},"}",[498,651,652],{"class":512},")\n",[488,654,656],{"className":490,"code":655,"filename":216,"language":493,"meta":494,"style":494},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createFsDrain } from 'evlog\u002Ffs'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain: createFsDrain(),\n})\n",[414,657,658,663,683,701,705,744,762,777],{"__ignoreMap":494},[498,659,660],{"class":500,"line":501},[498,661,662],{"class":549},"\u002F\u002F lib\u002Fevlog.ts\n",[498,664,665,667,669,672,674,676,678,681],{"class":500,"line":553},[498,666,505],{"class":504},[498,668,509],{"class":508},[498,670,671],{"class":512}," createEvlog",[498,673,516],{"class":508},[498,675,519],{"class":504},[498,677,522],{"class":508},[498,679,680],{"class":525},"evlog\u002Fnext",[498,682,529],{"class":508},[498,684,685,687,689,691,693,695,697,699],{"class":500,"line":572},[498,686,505],{"class":504},[498,688,509],{"class":508},[498,690,513],{"class":512},[498,692,516],{"class":508},[498,694,519],{"class":504},[498,696,522],{"class":508},[498,698,526],{"class":525},[498,700,529],{"class":508},[498,702,703],{"class":500,"line":579},[498,704,576],{"emptyLinePlaceholder":575},[498,706,707,709,712,714,717,719,722,724,727,729,732,734,737,739,741],{"class":500,"line":610},[498,708,582],{"class":504},[498,710,711],{"class":603}," const",[498,713,509],{"class":508},[498,715,716],{"class":512}," withEvlog",[498,718,638],{"class":508},[498,720,721],{"class":512}," useLogger",[498,723,638],{"class":508},[498,725,726],{"class":512}," log",[498,728,638],{"class":508},[498,730,731],{"class":512}," createError ",[498,733,649],{"class":508},[498,735,736],{"class":508}," =",[498,738,671],{"class":588},[498,740,592],{"class":512},[498,742,743],{"class":508},"{\n",[498,745,746,749,752,754,757,759],{"class":500,"line":646},[498,747,748],{"class":627},"  service",[498,750,751],{"class":508},":",[498,753,522],{"class":508},[498,755,756],{"class":525},"my-app",[498,758,630],{"class":508},[498,760,761],{"class":508},",\n",[498,763,765,768,770,772,775],{"class":500,"line":764},7,[498,766,767],{"class":627},"  drain",[498,769,751],{"class":508},[498,771,513],{"class":588},[498,773,774],{"class":512},"()",[498,776,761],{"class":508},[498,778,780,782],{"class":500,"line":779},8,[498,781,649],{"class":508},[498,783,652],{"class":512},[488,785,787],{"className":490,"code":786,"filename":246,"language":493,"meta":494,"style":494},"import { createFsDrain } from 'evlog\u002Ffs'\n\napp.use(evlog({ drain: createFsDrain() }))\n",[414,788,789,807,811],{"__ignoreMap":494},[498,790,791,793,795,797,799,801,803,805],{"class":500,"line":501},[498,792,505],{"class":504},[498,794,509],{"class":508},[498,796,513],{"class":512},[498,798,516],{"class":508},[498,800,519],{"class":504},[498,802,522],{"class":508},[498,804,526],{"class":525},[498,806,529],{"class":508},[498,808,809],{"class":500,"line":553},[498,810,576],{"emptyLinePlaceholder":575},[498,812,813,816,818,821,823,826,828,831,834,836,838,841,843],{"class":500,"line":572},[498,814,815],{"class":512},"app",[498,817,616],{"class":508},[498,819,820],{"class":588},"use",[498,822,592],{"class":512},[498,824,825],{"class":588},"evlog",[498,827,592],{"class":512},[498,829,830],{"class":508},"{",[498,832,833],{"class":627}," drain",[498,835,751],{"class":508},[498,837,513],{"class":588},[498,839,840],{"class":512},"() ",[498,842,649],{"class":508},[498,844,845],{"class":512},"))\n",[488,847,848],{"className":490,"code":786,"filename":241,"language":493,"meta":494,"style":494},[414,849,850,868,872],{"__ignoreMap":494},[498,851,852,854,856,858,860,862,864,866],{"class":500,"line":501},[498,853,505],{"class":504},[498,855,509],{"class":508},[498,857,513],{"class":512},[498,859,516],{"class":508},[498,861,519],{"class":504},[498,863,522],{"class":508},[498,865,526],{"class":525},[498,867,529],{"class":508},[498,869,870],{"class":500,"line":553},[498,871,576],{"emptyLinePlaceholder":575},[498,873,874,876,878,880,882,884,886,888,890,892,894,896,898],{"class":500,"line":572},[498,875,815],{"class":512},[498,877,616],{"class":508},[498,879,820],{"class":588},[498,881,592],{"class":512},[498,883,825],{"class":588},[498,885,592],{"class":512},[498,887,830],{"class":508},[498,889,833],{"class":627},[498,891,751],{"class":508},[498,893,513],{"class":588},[498,895,840],{"class":512},[498,897,649],{"class":508},[498,899,845],{"class":512},[488,901,903],{"className":490,"code":902,"filename":251,"language":493,"meta":494,"style":494},"import { createFsDrain } from 'evlog\u002Ffs'\n\nawait app.register(evlog, { drain: createFsDrain() })\n",[414,904,905,923,927],{"__ignoreMap":494},[498,906,907,909,911,913,915,917,919,921],{"class":500,"line":501},[498,908,505],{"class":504},[498,910,509],{"class":508},[498,912,513],{"class":512},[498,914,516],{"class":508},[498,916,519],{"class":504},[498,918,522],{"class":508},[498,920,526],{"class":525},[498,922,529],{"class":508},[498,924,925],{"class":500,"line":553},[498,926,576],{"emptyLinePlaceholder":575},[498,928,929,932,935,937,940,943,945,947,949,951,953,955,957],{"class":500,"line":572},[498,930,931],{"class":504},"await",[498,933,934],{"class":512}," app",[498,936,616],{"class":508},[498,938,939],{"class":588},"register",[498,941,942],{"class":512},"(evlog",[498,944,638],{"class":508},[498,946,509],{"class":508},[498,948,833],{"class":627},[498,950,751],{"class":508},[498,952,513],{"class":588},[498,954,840],{"class":512},[498,956,649],{"class":508},[498,958,652],{"class":512},[488,960,961],{"className":490,"code":786,"filename":256,"language":493,"meta":494,"style":494},[414,962,963,981,985],{"__ignoreMap":494},[498,964,965,967,969,971,973,975,977,979],{"class":500,"line":501},[498,966,505],{"class":504},[498,968,509],{"class":508},[498,970,513],{"class":512},[498,972,516],{"class":508},[498,974,519],{"class":504},[498,976,522],{"class":508},[498,978,526],{"class":525},[498,980,529],{"class":508},[498,982,983],{"class":500,"line":553},[498,984,576],{"emptyLinePlaceholder":575},[498,986,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011],{"class":500,"line":572},[498,988,815],{"class":512},[498,990,616],{"class":508},[498,992,820],{"class":588},[498,994,592],{"class":512},[498,996,825],{"class":588},[498,998,592],{"class":512},[498,1000,830],{"class":508},[498,1002,833],{"class":627},[498,1004,751],{"class":508},[498,1006,513],{"class":588},[498,1008,840],{"class":512},[498,1010,649],{"class":508},[498,1012,845],{"class":512},[488,1014,1016],{"className":490,"code":1015,"filename":236,"language":493,"meta":494,"style":494},"import { createFsDrain } from 'evlog\u002Ffs'\n\nEvlogModule.forRoot({ drain: createFsDrain() })\n",[414,1017,1018,1036,1040],{"__ignoreMap":494},[498,1019,1020,1022,1024,1026,1028,1030,1032,1034],{"class":500,"line":501},[498,1021,505],{"class":504},[498,1023,509],{"class":508},[498,1025,513],{"class":512},[498,1027,516],{"class":508},[498,1029,519],{"class":504},[498,1031,522],{"class":508},[498,1033,526],{"class":525},[498,1035,529],{"class":508},[498,1037,1038],{"class":500,"line":553},[498,1039,576],{"emptyLinePlaceholder":575},[498,1041,1042,1045,1047,1050,1052,1054,1056,1058,1060,1062,1064],{"class":500,"line":572},[498,1043,1044],{"class":512},"EvlogModule",[498,1046,616],{"class":508},[498,1048,1049],{"class":588},"forRoot",[498,1051,592],{"class":512},[498,1053,830],{"class":508},[498,1055,833],{"class":627},[498,1057,751],{"class":508},[498,1059,513],{"class":588},[498,1061,840],{"class":512},[498,1063,649],{"class":508},[498,1065,652],{"class":512},[488,1067,1069],{"className":490,"code":1068,"filename":271,"language":493,"meta":494,"style":494},"import { createFsDrain } from 'evlog\u002Ffs'\n\ninitLogger({ drain: createFsDrain() })\n",[414,1070,1071,1089,1093],{"__ignoreMap":494},[498,1072,1073,1075,1077,1079,1081,1083,1085,1087],{"class":500,"line":501},[498,1074,505],{"class":504},[498,1076,509],{"class":508},[498,1078,513],{"class":512},[498,1080,516],{"class":508},[498,1082,519],{"class":504},[498,1084,522],{"class":508},[498,1086,526],{"class":525},[498,1088,529],{"class":508},[498,1090,1091],{"class":500,"line":553},[498,1092,576],{"emptyLinePlaceholder":575},[498,1094,1095,1098,1100,1102,1104,1106,1108,1110,1112],{"class":500,"line":572},[498,1096,1097],{"class":588},"initLogger",[498,1099,592],{"class":512},[498,1101,830],{"class":508},[498,1103,833],{"class":627},[498,1105,751],{"class":508},[498,1107,513],{"class":588},[498,1109,840],{"class":512},[498,1111,649],{"class":508},[498,1113,652],{"class":512},[399,1115,1116,1117,1119],{},"Logs start appearing in ",[414,1118,416],{}," immediately.",[481,1121,1123],{"id":1122},"file-structure","File Structure",[488,1125,1131],{"className":1126,"code":1128,"filename":1129,"language":1130,"meta":494},[1127],"language-text",".evlog\u002F\n  logs\u002F\n    2026-03-14.jsonl    ← one file per day\n    2026-03-13.jsonl\n    2026-03-12.jsonl\n",".evlog\u002Flogs directory layout","text",[414,1132,1128],{"__ignoreMap":494},[399,1134,1135,1136,1139],{},"Each ",[414,1137,1138],{},".jsonl"," file contains one JSON object per line (NDJSON format), making it easy to parse, grep, and stream.",[1141,1142,1145,1146,1149,1150,1153,1154,1157],"callout",{"color":1143,"icon":1144},"success","i-lucide-git-branch","A ",[414,1147,1148],{},".gitignore"," is automatically created on first write, inside the ",[414,1151,1152],{},".evlog\u002F"," ancestor directory when present or in the configured ",[414,1155,1156],{},"dir"," otherwise. Log files are never committed to version control.",[481,1159,170],{"id":1160},"configuration",[1162,1163,85],"h3",{"id":1164},"options",[1166,1167,1168,1187],"table",{},[1169,1170,1171],"thead",{},[1172,1173,1174,1178,1181,1184],"tr",{},[1175,1176,1177],"th",{},"Option",[1175,1179,1180],{},"Type",[1175,1182,1183],{},"Default",[1175,1185,1186],{},"Description",[1188,1189,1190,1210,1230,1248],"tbody",{},[1172,1191,1192,1197,1202,1207],{},[1193,1194,1195],"td",{},[414,1196,1156],{},[1193,1198,1199],{},[414,1200,1201],{},"string",[1193,1203,1204],{},[414,1205,1206],{},"'.evlog\u002Flogs'",[1193,1208,1209],{},"Directory for log files",[1172,1211,1212,1217,1222,1227],{},[1193,1213,1214],{},[414,1215,1216],{},"maxFiles",[1193,1218,1219],{},[414,1220,1221],{},"number",[1193,1223,1224],{},[414,1225,1226],{},"undefined",[1193,1228,1229],{},"Max files to keep (auto-deletes oldest)",[1172,1231,1232,1237,1241,1245],{},[1193,1233,1234],{},[414,1235,1236],{},"maxSizePerFile",[1193,1238,1239],{},[414,1240,1221],{},[1193,1242,1243],{},[414,1244,1226],{},[1193,1246,1247],{},"Max bytes per file before rotating",[1172,1249,1250,1255,1260,1265],{},[1193,1251,1252],{},[414,1253,1254],{},"pretty",[1193,1256,1257],{},[414,1258,1259],{},"boolean",[1193,1261,1262],{},[414,1263,1264],{},"false",[1193,1266,1267],{},"Pretty-print JSON (multi-line, readable)",[1162,1269,1271],{"id":1270},"examples","Examples",[488,1273,1276],{"className":490,"code":1274,"filename":1275,"language":493,"meta":494,"style":494},"\u002F\u002F Keep only the last 7 days of logs\ncreateFsDrain({ maxFiles: 7 })\n\n\u002F\u002F Rotate files at 10MB, keep 30 files\ncreateFsDrain({\n  maxSizePerFile: 10 * 1024 * 1024,\n  maxFiles: 30,\n})\n\n\u002F\u002F Pretty-print for human reading\ncreateFsDrain({ pretty: true })\n\n\u002F\u002F Custom directory\ncreateFsDrain({ dir: '\u002Fvar\u002Flog\u002Fmyapp' })\n","server\u002Fplugins\u002Fevlog-drain.ts",[414,1277,1278,1283,1305,1309,1314,1322,1344,1356,1362,1367,1373,1395,1400,1406],{"__ignoreMap":494},[498,1279,1280],{"class":500,"line":501},[498,1281,1282],{"class":549},"\u002F\u002F Keep only the last 7 days of logs\n",[498,1284,1285,1288,1290,1292,1295,1297,1301,1303],{"class":500,"line":553},[498,1286,1287],{"class":588},"createFsDrain",[498,1289,592],{"class":512},[498,1291,830],{"class":508},[498,1293,1294],{"class":627}," maxFiles",[498,1296,751],{"class":508},[498,1298,1300],{"class":1299},"sbssI"," 7",[498,1302,516],{"class":508},[498,1304,652],{"class":512},[498,1306,1307],{"class":500,"line":572},[498,1308,576],{"emptyLinePlaceholder":575},[498,1310,1311],{"class":500,"line":579},[498,1312,1313],{"class":549},"\u002F\u002F Rotate files at 10MB, keep 30 files\n",[498,1315,1316,1318,1320],{"class":500,"line":610},[498,1317,1287],{"class":588},[498,1319,592],{"class":512},[498,1321,743],{"class":508},[498,1323,1324,1327,1329,1332,1335,1338,1340,1342],{"class":500,"line":646},[498,1325,1326],{"class":627},"  maxSizePerFile",[498,1328,751],{"class":508},[498,1330,1331],{"class":1299}," 10",[498,1333,1334],{"class":508}," *",[498,1336,1337],{"class":1299}," 1024",[498,1339,1334],{"class":508},[498,1341,1337],{"class":1299},[498,1343,761],{"class":508},[498,1345,1346,1349,1351,1354],{"class":500,"line":764},[498,1347,1348],{"class":627},"  maxFiles",[498,1350,751],{"class":508},[498,1352,1353],{"class":1299}," 30",[498,1355,761],{"class":508},[498,1357,1358,1360],{"class":500,"line":779},[498,1359,649],{"class":508},[498,1361,652],{"class":512},[498,1363,1365],{"class":500,"line":1364},9,[498,1366,576],{"emptyLinePlaceholder":575},[498,1368,1370],{"class":500,"line":1369},10,[498,1371,1372],{"class":549},"\u002F\u002F Pretty-print for human reading\n",[498,1374,1376,1378,1380,1382,1385,1387,1391,1393],{"class":500,"line":1375},11,[498,1377,1287],{"class":588},[498,1379,592],{"class":512},[498,1381,830],{"class":508},[498,1383,1384],{"class":627}," pretty",[498,1386,751],{"class":508},[498,1388,1390],{"class":1389},"sfNiH"," true",[498,1392,516],{"class":508},[498,1394,652],{"class":512},[498,1396,1398],{"class":500,"line":1397},12,[498,1399,576],{"emptyLinePlaceholder":575},[498,1401,1403],{"class":500,"line":1402},13,[498,1404,1405],{"class":549},"\u002F\u002F Custom directory\n",[498,1407,1409,1411,1413,1415,1418,1420,1422,1425,1427,1429],{"class":500,"line":1408},14,[498,1410,1287],{"class":588},[498,1412,592],{"class":512},[498,1414,830],{"class":508},[498,1416,1417],{"class":627}," dir",[498,1419,751],{"class":508},[498,1421,522],{"class":508},[498,1423,1424],{"class":525},"\u002Fvar\u002Flog\u002Fmyapp",[498,1426,630],{"class":508},[498,1428,516],{"class":508},[498,1430,652],{"class":512},[1162,1432,1434],{"id":1433},"file-rotation","File Rotation",[399,1436,1437,1438,1441,1442,1444],{},"By default, a new file is created each day (",[414,1439,1440],{},"2026-03-14.jsonl","). When ",[414,1443,1236],{}," is set, the adapter creates suffixed files when the current file exceeds the limit:",[488,1446,1450],{"className":1447,"code":1448,"filename":1449,"language":1130,"meta":494},[1127],".evlog\u002Flogs\u002F\n  2026-03-14.jsonl      ← base file (full)\n  2026-03-14.1.jsonl    ← first rotation\n  2026-03-14.2.jsonl    ← second rotation\n","Rotated log files",[414,1451,1448],{"__ignoreMap":494},[1162,1453,1455],{"id":1454},"cleanup","Cleanup",[399,1457,1458,1459,1461,1462,1464],{},"When ",[414,1460,1216],{}," is set, the adapter automatically deletes the oldest ",[414,1463,1138],{}," files after each write, keeping only the most recent files.",[481,1466,1468],{"id":1467},"combining-with-network-drains","Combining with Network Drains",[399,1470,1471],{},"Use the FS adapter alongside a network drain for local backup:",[488,1473,1475],{"className":490,"code":1474,"filename":1275,"language":493,"meta":494,"style":494},"import { createFsDrain } from 'evlog\u002Ffs'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst fs = createFsDrain({ maxFiles: 7 })\nconst axiom = createAxiomDrain()\n\nconst drain = async (ctx) => {\n  await Promise.allSettled([fs(ctx), axiom(ctx)])\n}\n",[414,1476,1477,1495,1515,1519,1546,1560,1564,1588,1626],{"__ignoreMap":494},[498,1478,1479,1481,1483,1485,1487,1489,1491,1493],{"class":500,"line":501},[498,1480,505],{"class":504},[498,1482,509],{"class":508},[498,1484,513],{"class":512},[498,1486,516],{"class":508},[498,1488,519],{"class":504},[498,1490,522],{"class":508},[498,1492,526],{"class":525},[498,1494,529],{"class":508},[498,1496,1497,1499,1501,1504,1506,1508,1510,1513],{"class":500,"line":553},[498,1498,505],{"class":504},[498,1500,509],{"class":508},[498,1502,1503],{"class":512}," createAxiomDrain",[498,1505,516],{"class":508},[498,1507,519],{"class":504},[498,1509,522],{"class":508},[498,1511,1512],{"class":525},"evlog\u002Faxiom",[498,1514,529],{"class":508},[498,1516,1517],{"class":500,"line":572},[498,1518,576],{"emptyLinePlaceholder":575},[498,1520,1521,1524,1527,1530,1532,1534,1536,1538,1540,1542,1544],{"class":500,"line":579},[498,1522,1523],{"class":603},"const",[498,1525,1526],{"class":512}," fs ",[498,1528,1529],{"class":508},"=",[498,1531,513],{"class":588},[498,1533,592],{"class":512},[498,1535,830],{"class":508},[498,1537,1294],{"class":627},[498,1539,751],{"class":508},[498,1541,1300],{"class":1299},[498,1543,516],{"class":508},[498,1545,652],{"class":512},[498,1547,1548,1550,1553,1555,1557],{"class":500,"line":610},[498,1549,1523],{"class":603},[498,1551,1552],{"class":512}," axiom ",[498,1554,1529],{"class":508},[498,1556,1503],{"class":588},[498,1558,1559],{"class":512},"()\n",[498,1561,1562],{"class":500,"line":646},[498,1563,576],{"emptyLinePlaceholder":575},[498,1565,1566,1568,1571,1573,1576,1579,1582,1584,1586],{"class":500,"line":764},[498,1567,1523],{"class":603},[498,1569,1570],{"class":512}," drain ",[498,1572,1529],{"class":508},[498,1574,1575],{"class":603}," async",[498,1577,1578],{"class":508}," (",[498,1580,1581],{"class":597},"ctx",[498,1583,427],{"class":508},[498,1585,604],{"class":603},[498,1587,607],{"class":508},[498,1589,1590,1593,1597,1599,1602,1605,1608,1610,1612,1614,1616,1619,1621,1623],{"class":500,"line":779},[498,1591,1592],{"class":504},"  await",[498,1594,1596],{"class":1595},"sBMFI"," Promise",[498,1598,616],{"class":508},[498,1600,1601],{"class":588},"allSettled",[498,1603,1604],{"class":627},"([",[498,1606,1607],{"class":588},"fs",[498,1609,592],{"class":627},[498,1611,1581],{"class":512},[498,1613,427],{"class":627},[498,1615,638],{"class":508},[498,1617,1618],{"class":588}," axiom",[498,1620,592],{"class":627},[498,1622,1581],{"class":512},[498,1624,1625],{"class":627},")])\n",[498,1627,1628],{"class":500,"line":1364},[498,1629,1630],{"class":508},"}\n",[481,1632,1634],{"id":1633},"querying-logs","Querying Logs",[1162,1636,1638],{"id":1637},"stream-in-real-time","Stream in real-time",[488,1640,1645],{"className":1641,"code":1642,"filename":1643,"language":1644,"meta":494,"style":494},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","tail -f .evlog\u002Flogs\u002F2026-03-14.jsonl\n","Terminal","bash",[414,1646,1647],{"__ignoreMap":494},[498,1648,1649,1652,1655],{"class":500,"line":501},[498,1650,1651],{"class":1595},"tail",[498,1653,1654],{"class":525}," -f",[498,1656,1657],{"class":525}," .evlog\u002Flogs\u002F2026-03-14.jsonl\n",[1162,1659,1661],{"id":1660},"search-with-jq","Search with jq",[488,1663,1665],{"className":1641,"code":1664,"filename":1643,"language":1644,"meta":494,"style":494},"# Find errors\ncat .evlog\u002Flogs\u002F2026-03-14.jsonl | jq 'select(.level == \"error\")'\n\n# Slow requests (duration is a formatted string like \"706ms\" or \"1.23s\")\ncat .evlog\u002Flogs\u002F2026-03-14.jsonl | jq 'select(.duration | test(\"^[0-9.]+s\"))'\n\n# Requests by path\ncat .evlog\u002Flogs\u002F2026-03-14.jsonl | jq 'select(.path == \"\u002Fapi\u002Fcheckout\")'\n",[414,1666,1667,1672,1693,1697,1702,1719,1723,1728],{"__ignoreMap":494},[498,1668,1669],{"class":500,"line":501},[498,1670,1671],{"class":549},"# Find errors\n",[498,1673,1674,1677,1680,1683,1686,1688,1691],{"class":500,"line":553},[498,1675,1676],{"class":1595},"cat",[498,1678,1679],{"class":525}," .evlog\u002Flogs\u002F2026-03-14.jsonl",[498,1681,1682],{"class":508}," |",[498,1684,1685],{"class":1595}," jq",[498,1687,522],{"class":508},[498,1689,1690],{"class":525},"select(.level == \"error\")",[498,1692,529],{"class":508},[498,1694,1695],{"class":500,"line":572},[498,1696,576],{"emptyLinePlaceholder":575},[498,1698,1699],{"class":500,"line":579},[498,1700,1701],{"class":549},"# Slow requests (duration is a formatted string like \"706ms\" or \"1.23s\")\n",[498,1703,1704,1706,1708,1710,1712,1714,1717],{"class":500,"line":610},[498,1705,1676],{"class":1595},[498,1707,1679],{"class":525},[498,1709,1682],{"class":508},[498,1711,1685],{"class":1595},[498,1713,522],{"class":508},[498,1715,1716],{"class":525},"select(.duration | test(\"^[0-9.]+s\"))",[498,1718,529],{"class":508},[498,1720,1721],{"class":500,"line":646},[498,1722,576],{"emptyLinePlaceholder":575},[498,1724,1725],{"class":500,"line":764},[498,1726,1727],{"class":549},"# Requests by path\n",[498,1729,1730,1732,1734,1736,1738,1740,1743],{"class":500,"line":779},[498,1731,1676],{"class":1595},[498,1733,1679],{"class":525},[498,1735,1682],{"class":508},[498,1737,1685],{"class":1595},[498,1739,522],{"class":508},[498,1741,1742],{"class":525},"select(.path == \"\u002Fapi\u002Fcheckout\")",[498,1744,529],{"class":508},[1162,1746,1748],{"id":1747},"search-with-grep","Search with grep",[488,1750,1752],{"className":1641,"code":1751,"filename":1643,"language":1644,"meta":494,"style":494},"# Find all errors\ngrep '\"level\":\"error\"' .evlog\u002Flogs\u002F2026-03-14.jsonl\n\n# Find by request ID\ngrep 'req_abc123' .evlog\u002Flogs\u002F*.jsonl\n",[414,1753,1754,1759,1773,1777,1782],{"__ignoreMap":494},[498,1755,1756],{"class":500,"line":501},[498,1757,1758],{"class":549},"# Find all errors\n",[498,1760,1761,1764,1766,1769,1771],{"class":500,"line":553},[498,1762,1763],{"class":1595},"grep",[498,1765,522],{"class":508},[498,1767,1768],{"class":525},"\"level\":\"error\"",[498,1770,630],{"class":508},[498,1772,1657],{"class":525},[498,1774,1775],{"class":500,"line":572},[498,1776,576],{"emptyLinePlaceholder":575},[498,1778,1779],{"class":500,"line":579},[498,1780,1781],{"class":549},"# Find by request ID\n",[498,1783,1784,1786,1788,1791,1793,1796,1799],{"class":500,"line":610},[498,1785,1763],{"class":1595},[498,1787,522],{"class":508},[498,1789,1790],{"class":525},"req_abc123",[498,1792,630],{"class":508},[498,1794,1795],{"class":525}," .evlog\u002Flogs\u002F",[498,1797,1798],{"class":512},"*",[498,1800,1801],{"class":525},".jsonl\n",[481,1803,1805],{"id":1804},"direct-api-usage","Direct API Usage",[399,1807,1808],{},"For advanced use cases, use the lower-level write functions:",[488,1810,1812],{"className":490,"code":1811,"filename":492,"language":493,"meta":494,"style":494},"import { writeToFs, writeBatchToFs } from 'evlog\u002Ffs'\n\nawait writeToFs(event, {\n  dir: '.evlog\u002Flogs',\n  pretty: false,\n})\n\nawait writeBatchToFs(events, {\n  dir: '.evlog\u002Flogs',\n  pretty: false,\n})\n",[414,1813,1814,1838,1842,1855,1871,1883,1889,1893,1906,1920,1930],{"__ignoreMap":494},[498,1815,1816,1818,1820,1823,1825,1828,1830,1832,1834,1836],{"class":500,"line":501},[498,1817,505],{"class":504},[498,1819,509],{"class":508},[498,1821,1822],{"class":512}," writeToFs",[498,1824,638],{"class":508},[498,1826,1827],{"class":512}," writeBatchToFs",[498,1829,516],{"class":508},[498,1831,519],{"class":504},[498,1833,522],{"class":508},[498,1835,526],{"class":525},[498,1837,529],{"class":508},[498,1839,1840],{"class":500,"line":553},[498,1841,576],{"emptyLinePlaceholder":575},[498,1843,1844,1846,1848,1851,1853],{"class":500,"line":572},[498,1845,931],{"class":504},[498,1847,1822],{"class":588},[498,1849,1850],{"class":512},"(event",[498,1852,638],{"class":508},[498,1854,607],{"class":508},[498,1856,1857,1860,1862,1864,1867,1869],{"class":500,"line":579},[498,1858,1859],{"class":627},"  dir",[498,1861,751],{"class":508},[498,1863,522],{"class":508},[498,1865,1866],{"class":525},".evlog\u002Flogs",[498,1868,630],{"class":508},[498,1870,761],{"class":508},[498,1872,1873,1876,1878,1881],{"class":500,"line":610},[498,1874,1875],{"class":627},"  pretty",[498,1877,751],{"class":508},[498,1879,1880],{"class":1389}," false",[498,1882,761],{"class":508},[498,1884,1885,1887],{"class":500,"line":646},[498,1886,649],{"class":508},[498,1888,652],{"class":512},[498,1890,1891],{"class":500,"line":764},[498,1892,576],{"emptyLinePlaceholder":575},[498,1894,1895,1897,1899,1902,1904],{"class":500,"line":779},[498,1896,931],{"class":504},[498,1898,1827],{"class":588},[498,1900,1901],{"class":512},"(events",[498,1903,638],{"class":508},[498,1905,607],{"class":508},[498,1907,1908,1910,1912,1914,1916,1918],{"class":500,"line":1364},[498,1909,1859],{"class":627},[498,1911,751],{"class":508},[498,1913,522],{"class":508},[498,1915,1866],{"class":525},[498,1917,630],{"class":508},[498,1919,761],{"class":508},[498,1921,1922,1924,1926,1928],{"class":500,"line":1369},[498,1923,1875],{"class":627},[498,1925,751],{"class":508},[498,1927,1880],{"class":1389},[498,1929,761],{"class":508},[498,1931,1932,1934],{"class":500,"line":1375},[498,1933,649],{"class":508},[498,1935,652],{"class":512},[481,1937,1939],{"id":1938},"ai-log-analysis","AI Log Analysis",[399,1941,1942,1943,1949],{},"The file system drain pairs with the ",[470,1944,1945,1948],{"href":26},[414,1946,1947],{},"analyze-logs"," agent skill",". When installed, your AI assistant can read the NDJSON logs directly to debug errors, trace requests, and investigate performance without any external tools.",[481,1951,1953],{"id":1952},"next-steps","Next Steps",[403,1955,1956,1961,1967,1972],{},[406,1957,1958,1960],{},[470,1959,25],{"href":26}," - Let AI analyze your logs",[406,1962,1963,1966],{},[470,1964,1965],{"href":304},"Axiom Adapter"," - Send logs to Axiom for querying and dashboards",[406,1968,1969,1971],{},[470,1970,358],{"href":359}," - Add batching and retry to any drain",[406,1973,1974,1976],{},[470,1975,368],{"href":369}," - Build your own adapter",[1978,1979,1980],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":494,"searchDepth":553,"depth":553,"links":1982},[1983,1984,1985,1986,1992,1993,1998,1999,2000],{"id":483,"depth":553,"text":15},{"id":532,"depth":553,"text":20},{"id":1122,"depth":553,"text":1123},{"id":1160,"depth":553,"text":170,"children":1987},[1988,1989,1990,1991],{"id":1164,"depth":572,"text":85},{"id":1270,"depth":572,"text":1271},{"id":1433,"depth":572,"text":1434},{"id":1454,"depth":572,"text":1455},{"id":1467,"depth":553,"text":1468},{"id":1633,"depth":553,"text":1634,"children":1994},[1995,1996,1997],{"id":1637,"depth":572,"text":1638},{"id":1660,"depth":572,"text":1661},{"id":1747,"depth":572,"text":1748},{"id":1804,"depth":553,"text":1805},{"id":1938,"depth":553,"text":1939},{"id":1952,"depth":553,"text":1953},"Write wide events to the local file system as NDJSON for local debugging, AI agent integration, and production backup.","md",[2004,2011],{"label":2005,"icon":2006,"to":2007,"target":2008,"color":2009,"variant":2010},"NDJSON Format","i-lucide-external-link","https:\u002F\u002Fgithub.com\u002Fndjson\u002Fndjson-spec","_blank","neutral","subtle",{"label":1965,"icon":306,"to":304,"color":2009,"variant":2010},{},{"title":343,"icon":346},{"title":394,"description":2001},"T-NSInoBfsszInuemgpjhveYPzh_-TPNDElWBkmM_fo",[2017,2019],{"title":333,"path":334,"stem":335,"description":2018,"icon":336,"children":-1},"Send wide events to HyperDX via OTLP\u002FHTTP using HyperDX’s documented OpenTelemetry endpoint and authorization header. Zero-config setup with environment variables.",{"title":348,"path":349,"stem":350,"description":2020,"icon":351,"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.",1778106403776]