[{"data":1,"prerenderedAt":1100},["ShallowReactive",2],{"navigation_docs":3,"-nuxthub-overview":277,"-nuxthub-overview-surround":1095},[4,30,65,105,188,247,263],{"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},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[70,75,80,85,90,95,100],{"title":71,"path":72,"stem":73,"icon":74},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":76,"path":77,"stem":78,"icon":79},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":86,"path":87,"stem":88,"icon":89},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":96,"path":97,"stem":98,"icon":99},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":101,"path":102,"stem":103,"icon":104},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[110,114,119,124,129,134,139,144,149,154,159,164,169,174,178,183],{"title":36,"path":111,"stem":112,"icon":113},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":115,"path":116,"stem":117,"icon":118},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":120,"path":121,"stem":122,"icon":123},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":125,"path":126,"stem":127,"icon":128},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":130,"path":131,"stem":132,"icon":133},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":135,"path":136,"stem":137,"icon":138},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":140,"path":141,"stem":142,"icon":143},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":145,"path":146,"stem":147,"icon":148},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":150,"path":151,"stem":152,"icon":153},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":155,"path":156,"stem":157,"icon":158},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":160,"path":161,"stem":162,"icon":163},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":165,"path":166,"stem":167,"icon":168},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":170,"path":171,"stem":172,"icon":173},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":175,"path":176,"stem":177,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":179,"path":180,"stem":181,"icon":182},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":184,"path":185,"stem":186,"icon":187},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Adapters","\u002Fadapters","5.adapters",[193,197,202,207,212,217,222,227,232,237,242],{"title":36,"path":194,"stem":195,"icon":196},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":198,"path":199,"stem":200,"icon":201},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F10.pipeline","i-lucide-workflow",{"title":203,"path":204,"stem":205,"icon":206},"Browser","\u002Fadapters\u002Fbrowser","5.adapters\u002F11.browser","i-lucide-globe",{"title":208,"path":209,"stem":210,"icon":211},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":213,"path":214,"stem":215,"icon":216},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":218,"path":219,"stem":220,"icon":221},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":223,"path":224,"stem":225,"icon":226},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":228,"path":229,"stem":230,"icon":231},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":233,"path":234,"stem":235,"icon":236},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":238,"path":239,"stem":240,"icon":241},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F8.hyperdx","i-custom-hyperdx",{"title":243,"path":244,"stem":245,"icon":246},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F9.custom","i-lucide-code",{"title":248,"path":249,"stem":250,"children":251,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[252,255,259],{"title":36,"path":253,"stem":254,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":256,"path":257,"stem":258,"icon":187},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":260,"path":261,"stem":262,"icon":246},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":264,"path":265,"stem":266,"children":267,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[268,272],{"title":36,"path":269,"stem":270,"icon":271},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":273,"path":274,"stem":275,"icon":276},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":278,"title":279,"body":280,"description":1082,"extension":1083,"links":1084,"meta":1091,"navigation":1092,"path":269,"seo":1093,"stem":270,"__hash__":1094},"docs\u002F7.nuxthub\u002F1.overview.md","NuxtHub Storage",{"type":281,"value":282,"toc":1071},"minimark",[283,291,296,299,328,333,337,417,424,447,451,457,571,584,587,617,635,639,647,657,662,672,891,908,912,915,933,940,944,952,1055,1059,1067],[284,285,286,290],"p",{},[287,288,289],"code",{},"@evlog\u002Fnuxthub"," stores your evlog wide events directly in your NuxtHub database. No external logging service needed. Your logs live next to your data, with automatic cleanup based on a retention policy.",[292,293,295],"h2",{"id":294},"why-self-hosted-logs","Why Self-Hosted Logs?",[284,297,298],{},"External logging services (Axiom, Datadog, etc.) are great for production at scale. But sometimes you want:",[300,301,302,310,316,322],"ul",{},[303,304,305,309],"li",{},[306,307,308],"strong",{},"Zero external dependencies"," - logs stored in the same database as your app",[303,311,312,315],{},[306,313,314],{},"Full data ownership"," - no third-party access to your log data",[303,317,318,321],{},[306,319,320],{},"Free tier friendly"," - no per-event pricing, just your existing database",[303,323,324,327],{},[306,325,326],{},"Development & staging"," - full log visibility without paying for a service",[284,329,330,332],{},[287,331,289],{}," works as a drop-in drain. Your existing evlog setup stays the same, you just get a database-backed storage layer on top.",[292,334,336],{"id":335},"install","Install",[338,339,340,368,385,401],"code-group",{},[341,342,348],"pre",{"className":343,"code":344,"filename":345,"language":346,"meta":347,"style":347},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","pnpm","bash","",[287,349,350],{"__ignoreMap":347},[351,352,355,358,362,365],"span",{"class":353,"line":354},"line",1,[351,356,345],{"class":357},"sBMFI",[351,359,361],{"class":360},"sfazB"," add",[351,363,364],{"class":360}," @nuxthub\u002Fcore",[351,366,367],{"class":360}," @evlog\u002Fnuxthub\n",[341,369,372],{"className":343,"code":370,"filename":371,"language":346,"meta":347,"style":347},"npm install @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","npm",[287,373,374],{"__ignoreMap":347},[351,375,376,378,381,383],{"class":353,"line":354},[351,377,371],{"class":357},[351,379,380],{"class":360}," install",[351,382,364],{"class":360},[351,384,367],{"class":360},[341,386,389],{"className":343,"code":387,"filename":388,"language":346,"meta":347,"style":347},"yarn add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","yarn",[287,390,391],{"__ignoreMap":347},[351,392,393,395,397,399],{"class":353,"line":354},[351,394,388],{"class":357},[351,396,361],{"class":360},[351,398,364],{"class":360},[351,400,367],{"class":360},[341,402,405],{"className":343,"code":403,"filename":404,"language":346,"meta":347,"style":347},"bun add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","bun",[287,406,407],{"__ignoreMap":347},[351,408,409,411,413,415],{"class":353,"line":354},[351,410,404],{"class":357},[351,412,361],{"class":360},[351,414,364],{"class":360},[351,416,367],{"class":360},[284,418,419,420,423],{},"Or with ",[287,421,422],{},"nuxi",":",[341,425,428],{"className":343,"code":426,"filename":427,"language":346,"meta":347,"style":347},"npx nuxi module add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","Terminal",[287,429,430],{"__ignoreMap":347},[351,431,432,435,438,441,443,445],{"class":353,"line":354},[351,433,434],{"class":357},"npx",[351,436,437],{"class":360}," nuxi",[351,439,440],{"class":360}," module",[351,442,361],{"class":360},[351,444,364],{"class":360},[351,446,367],{"class":360},[292,448,450],{"id":449},"setup","Setup",[284,452,453,454,423],{},"Add the module to your ",[287,455,456],{},"nuxt.config.ts",[341,458,462],{"className":459,"code":460,"filename":456,"language":461,"meta":347,"style":347},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@nuxthub\u002Fcore', '@evlog\u002Fnuxthub'],\n\n  evlog: {\n    retention: '7d',\n  },\n})\n","typescript",[287,463,464,485,521,528,539,556,562],{"__ignoreMap":347},[351,465,466,470,473,477,481],{"class":353,"line":354},[351,467,469],{"class":468},"s7zQu","export",[351,471,472],{"class":468}," default",[351,474,476],{"class":475},"s2Zo4"," defineNuxtConfig",[351,478,480],{"class":479},"sTEyZ","(",[351,482,484],{"class":483},"sMK4o","{\n",[351,486,488,492,494,497,500,503,505,508,511,513,515,518],{"class":353,"line":487},2,[351,489,491],{"class":490},"swJcz","  modules",[351,493,423],{"class":483},[351,495,496],{"class":479}," [",[351,498,499],{"class":483},"'",[351,501,502],{"class":360},"@nuxthub\u002Fcore",[351,504,499],{"class":483},[351,506,507],{"class":483},",",[351,509,510],{"class":483}," '",[351,512,289],{"class":360},[351,514,499],{"class":483},[351,516,517],{"class":479},"]",[351,519,520],{"class":483},",\n",[351,522,524],{"class":353,"line":523},3,[351,525,527],{"emptyLinePlaceholder":526},true,"\n",[351,529,531,534,536],{"class":353,"line":530},4,[351,532,533],{"class":490},"  evlog",[351,535,423],{"class":483},[351,537,538],{"class":483}," {\n",[351,540,542,545,547,549,552,554],{"class":353,"line":541},5,[351,543,544],{"class":490},"    retention",[351,546,423],{"class":483},[351,548,510],{"class":483},[351,550,551],{"class":360},"7d",[351,553,499],{"class":483},[351,555,520],{"class":483},[351,557,559],{"class":353,"line":558},6,[351,560,561],{"class":483},"  },\n",[351,563,565,568],{"class":353,"line":564},7,[351,566,567],{"class":483},"}",[351,569,570],{"class":479},")\n",[284,572,573,574,576,577,579,580,583],{},"Even if ",[287,575,289],{}," can auto-register missing modules, we recommend explicitly installing ",[287,578,502],{}," and registering it in ",[287,581,582],{},"modules"," for a clearer and more predictable setup.",[284,585,586],{},"That's it. The module automatically:",[588,589,590,600,607,614],"ol",{},[303,591,592,593,596,597,599],{},"Installs ",[287,594,595],{},"evlog\u002Fnuxt"," and ",[287,598,502],{}," if not already registered",[303,601,602,603,606],{},"Registers the ",[287,604,605],{},"evlog_events"," database schema with NuxtHub",[303,608,609,610,613],{},"Hooks into ",[287,611,612],{},"evlog:drain"," to store every event in the database",[303,615,616],{},"Schedules a cleanup task based on your retention policy",[618,619,621,624,625,631,632,634],"callout",{"color":620,"icon":13},"info",[306,622,623],{},"Prerequisites:"," Your project must use ",[626,627,264],"a",{"href":628,"rel":629},"https:\u002F\u002Fhub.nuxt.com",[630],"nofollow"," with a database configured. ",[287,633,289],{}," uses Drizzle ORM to interact with the database.",[292,636,638],{"id":637},"how-it-works","How It Works",[341,640,645],{"className":641,"code":643,"language":644},[642],"language-text","Request → evlog wide event → evlog:drain hook → INSERT into evlog_events table\n                                                          ↓\n                          Cron task (automatic) → DELETE events older than retention\n","text",[287,646,643],{"__ignoreMap":347},[284,648,649,650,652,653,656],{},"Every wide event emitted by evlog is stored as a row in the ",[287,651,605],{}," table. The drain plugin handles both single events and batches (when used with the ",[626,654,655],{"href":199},"pipeline",").",[658,659,661],"h3",{"id":660},"database-schema","Database Schema",[284,663,664,665,667,668,671],{},"The ",[287,666,605],{}," table stores indexed columns for fast querying and a ",[287,669,670],{},"data"," JSON column for all remaining fields:",[673,674,675,691],"table",{},[676,677,678],"thead",{},[679,680,681,685,688],"tr",{},[682,683,684],"th",{},"Column",[682,686,687],{},"Type",[682,689,690],{},"Description",[692,693,694,709,723,737,751,765,779,793,808,822,836,850,864,877],"tbody",{},[679,695,696,702,706],{},[697,698,699],"td",{},[287,700,701],{},"id",[697,703,704],{},[287,705,644],{},[697,707,708],{},"UUID primary key",[679,710,711,716,720],{},[697,712,713],{},[287,714,715],{},"timestamp",[697,717,718],{},[287,719,644],{},[697,721,722],{},"Event timestamp",[679,724,725,730,734],{},[697,726,727],{},[287,728,729],{},"level",[697,731,732],{},[287,733,644],{},[697,735,736],{},"Log level (info, warn, error, debug)",[679,738,739,744,748],{},[697,740,741],{},[287,742,743],{},"service",[697,745,746],{},[287,747,644],{},[697,749,750],{},"Service name",[679,752,753,758,762],{},[697,754,755],{},[287,756,757],{},"environment",[697,759,760],{},[287,761,644],{},[697,763,764],{},"Environment (production, staging, etc.)",[679,766,767,772,776],{},[697,768,769],{},[287,770,771],{},"method",[697,773,774],{},[287,775,644],{},[697,777,778],{},"HTTP method",[679,780,781,786,790],{},[697,782,783],{},[287,784,785],{},"path",[697,787,788],{},[287,789,644],{},[697,791,792],{},"Request path",[679,794,795,800,805],{},[697,796,797],{},[287,798,799],{},"status",[697,801,802],{},[287,803,804],{},"integer",[697,806,807],{},"HTTP status code",[679,809,810,815,819],{},[697,811,812],{},[287,813,814],{},"duration_ms",[697,816,817],{},[287,818,804],{},[697,820,821],{},"Request duration in milliseconds",[679,823,824,829,833],{},[697,825,826],{},[287,827,828],{},"request_id",[697,830,831],{},[287,832,644],{},[697,834,835],{},"Request correlation ID",[679,837,838,843,847],{},[697,839,840],{},[287,841,842],{},"source",[697,844,845],{},[287,846,644],{},[697,848,849],{},"Event source (server, client)",[679,851,852,857,861],{},[697,853,854],{},[287,855,856],{},"error",[697,858,859],{},[287,860,644],{},[697,862,863],{},"Error details (JSON string)",[679,865,866,870,874],{},[697,867,868],{},[287,869,670],{},[697,871,872],{},[287,873,644],{},[697,875,876],{},"All remaining event fields (JSON)",[679,878,879,884,888],{},[697,880,881],{},[287,882,883],{},"created_at",[697,885,886],{},[287,887,644],{},[697,889,890],{},"Row insertion timestamp",[284,892,893,894,896,897,896,899,896,901,896,903,896,905,907],{},"Indexed columns: ",[287,895,715],{},", ",[287,898,729],{},[287,900,743],{},[287,902,799],{},[287,904,828],{},[287,906,883],{},".",[658,909,911],{"id":910},"dialect-support","Dialect Support",[284,913,914],{},"The schema is automatically registered for your NuxtHub database dialect:",[300,916,917,923,928],{},[303,918,919,922],{},[306,920,921],{},"SQLite"," (default for Cloudflare D1)",[303,924,925],{},[306,926,927],{},"MySQL",[303,929,930],{},[306,931,932],{},"PostgreSQL",[284,934,935,936,939],{},"The correct schema is selected via the ",[287,937,938],{},"hub:db:schema:extend"," hook based on your NuxtHub configuration.",[292,941,943],{"id":942},"combining-with-external-adapters","Combining with External Adapters",[284,945,946,948,949,951],{},[287,947,289],{}," doesn't replace external adapters, you can use both. The module registers its own ",[287,950,612],{}," hook, so any other drain plugins you have will still work:",[341,953,956],{"className":459,"code":954,"filename":955,"language":461,"meta":347,"style":347},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  \u002F\u002F This runs alongside @evlog\u002Fnuxthub's built-in drain\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[287,957,958,983,987,1013,1019,1049],{"__ignoreMap":347},[351,959,960,963,966,969,972,975,977,980],{"class":353,"line":354},[351,961,962],{"class":468},"import",[351,964,965],{"class":483}," {",[351,967,968],{"class":479}," createAxiomDrain",[351,970,971],{"class":483}," }",[351,973,974],{"class":468}," from",[351,976,510],{"class":483},[351,978,979],{"class":360},"evlog\u002Faxiom",[351,981,982],{"class":483},"'\n",[351,984,985],{"class":353,"line":487},[351,986,527],{"emptyLinePlaceholder":526},[351,988,989,991,993,996,998,1000,1004,1007,1011],{"class":353,"line":523},[351,990,469],{"class":468},[351,992,472],{"class":468},[351,994,995],{"class":475}," defineNitroPlugin",[351,997,480],{"class":479},[351,999,480],{"class":483},[351,1001,1003],{"class":1002},"sHdIc","nitroApp",[351,1005,1006],{"class":483},")",[351,1008,1010],{"class":1009},"spNyl"," =>",[351,1012,538],{"class":483},[351,1014,1015],{"class":353,"line":530},[351,1016,1018],{"class":1017},"sHwdD","  \u002F\u002F This runs alongside @evlog\u002Fnuxthub's built-in drain\n",[351,1020,1021,1024,1026,1029,1031,1034,1036,1038,1040,1042,1044,1046],{"class":353,"line":541},[351,1022,1023],{"class":479},"  nitroApp",[351,1025,907],{"class":483},[351,1027,1028],{"class":479},"hooks",[351,1030,907],{"class":483},[351,1032,1033],{"class":475},"hook",[351,1035,480],{"class":490},[351,1037,499],{"class":483},[351,1039,612],{"class":360},[351,1041,499],{"class":483},[351,1043,507],{"class":483},[351,1045,968],{"class":475},[351,1047,1048],{"class":490},"())\n",[351,1050,1051,1053],{"class":353,"line":558},[351,1052,567],{"class":483},[351,1054,570],{"class":479},[292,1056,1058],{"id":1057},"next-steps","Next Steps",[300,1060,1061],{},[303,1062,1063,1066],{},[626,1064,1065],{"href":274},"Retention & Cleanup"," - Configure retention policy and cleanup scheduling",[1068,1069,1070],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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}",{"title":347,"searchDepth":487,"depth":487,"links":1072},[1073,1074,1075,1076,1080,1081],{"id":294,"depth":487,"text":295},{"id":335,"depth":487,"text":336},{"id":449,"depth":487,"text":450},{"id":637,"depth":487,"text":638,"children":1077},[1078,1079],{"id":660,"depth":523,"text":661},{"id":910,"depth":523,"text":911},{"id":942,"depth":487,"text":943},{"id":1057,"depth":487,"text":1058},"Self-hosted log retention for evlog using NuxtHub database storage. Store, query, and automatically clean up your structured logs with zero external dependencies.","md",[1085,1090],{"label":264,"icon":1086,"to":628,"target":1087,"color":1088,"variant":1089},"i-lucide-external-link","_blank","neutral","subtle",{"label":189,"icon":196,"to":194,"color":1088,"variant":1089},{},{"title":36,"icon":271},{"title":279,"description":1082},"Y2TQGYIcb0Dg6M8JuoiOzmaVpAv1f7WV9wLp6dPbXeY",[1096,1098],{"title":260,"path":261,"stem":262,"description":1097,"icon":246,"children":-1},"Write custom enrichers to add derived context to your wide events. Add deployment metadata, tenant IDs, feature flags, or any computed data.",{"title":273,"path":274,"stem":275,"description":1099,"icon":276,"children":-1},"Configure how long logs are kept in NuxtHub and how they are automatically cleaned up with scheduled tasks, cron jobs, and retention policies.",1775308053034]