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