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