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