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