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