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