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