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