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