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