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