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