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