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