[{"data":1,"prerenderedAt":1915},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-self-hosted-nuxthub":607,"-integrate-adapters-self-hosted-nuxthub-surround":1910},[4,35,85,143,323,484,543,582],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":109,"path":110,"stem":111,"icon":112},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":114,"path":115,"stem":116,"icon":117},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":119,"path":120,"stem":121,"icon":122},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":124,"path":125,"stem":126,"icon":127},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":129,"path":130,"stem":131,"icon":132},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":134,"path":135,"stem":136,"icon":137},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":139,"path":140,"stem":141,"icon":142},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":144,"path":145,"stem":146,"children":147,"page":34},"Integrate","\u002Fintegrate","4.integrate",[148,152,235],{"title":41,"path":149,"stem":150,"icon":151},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":153,"path":154,"stem":155,"children":156,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[157,160,190,215],{"title":41,"path":158,"stem":159,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":161,"path":162,"stem":163,"children":164,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[165,170,175,180,185],{"title":166,"path":167,"stem":168,"icon":169},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":171,"path":172,"stem":173,"icon":174},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":176,"path":177,"stem":178,"icon":179},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":181,"path":182,"stem":183,"icon":184},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":186,"path":187,"stem":188,"icon":189},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":191,"path":192,"stem":193,"children":194,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[195,200,205,210],{"title":196,"path":197,"stem":198,"icon":199},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":201,"path":202,"stem":203,"icon":204},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":206,"path":207,"stem":208,"icon":209},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":211,"path":212,"stem":213,"icon":214},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":216,"path":217,"stem":218,"children":219,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[220,225,230],{"title":221,"path":222,"stem":223,"icon":224},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":226,"path":227,"stem":228,"icon":229},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":231,"path":232,"stem":233,"icon":234},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":236,"path":237,"stem":238,"children":239,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[240,244,249,254,259,264,269,274,279,284,289,294,299,304,308,313,318],{"title":41,"path":241,"stem":242,"icon":243},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":245,"path":246,"stem":247,"icon":248},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":250,"path":251,"stem":252,"icon":253},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":255,"path":256,"stem":257,"icon":258},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":260,"path":261,"stem":262,"icon":263},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":265,"path":266,"stem":267,"icon":268},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":270,"path":271,"stem":272,"icon":273},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":275,"path":276,"stem":277,"icon":278},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":280,"path":281,"stem":282,"icon":283},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":285,"path":286,"stem":287,"icon":288},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":290,"path":291,"stem":292,"icon":293},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":295,"path":296,"stem":297,"icon":298},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":300,"path":301,"stem":302,"icon":303},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":305,"path":306,"stem":307,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":309,"path":310,"stem":311,"icon":312},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":314,"path":315,"stem":316,"icon":317},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":319,"path":320,"stem":321,"icon":322},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":324,"path":325,"stem":326,"children":327,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[328,331,336,364,391,423,444,449,454,458],{"title":41,"path":329,"stem":330,"icon":112},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":332,"path":333,"stem":334,"icon":335},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":337,"icon":338,"path":339,"stem":340,"children":341,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[342,345,350,355,360],{"title":41,"path":343,"stem":344,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":346,"path":347,"stem":348,"icon":349},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":351,"path":352,"stem":353,"icon":354},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":356,"path":357,"stem":358,"icon":359},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":361,"path":362,"stem":363,"icon":142},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":365,"icon":366,"path":367,"stem":368,"children":369,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[370,373,378,383,387],{"title":41,"path":371,"stem":372,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":374,"path":375,"stem":376,"icon":377},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":379,"path":380,"stem":381,"icon":382},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":384,"path":385,"stem":386,"icon":335},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":388,"path":389,"stem":390,"icon":117},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":392,"icon":393,"path":394,"stem":395,"children":396,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[397,400,405,410,415,419],{"title":41,"path":398,"stem":399,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":401,"path":402,"stem":403,"icon":404},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":406,"path":407,"stem":408,"icon":409},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":411,"path":412,"stem":413,"icon":414},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":416,"path":417,"stem":418,"icon":393},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":420,"path":421,"stem":422,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":361,"icon":117,"path":424,"stem":425,"children":426,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[427,430,435,440],{"title":41,"path":428,"stem":429,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":431,"path":432,"stem":433,"icon":434},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":436,"path":437,"stem":438,"icon":439},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":441,"path":442,"stem":443,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":445,"path":446,"stem":447,"icon":448},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":450,"path":451,"stem":452,"icon":453},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":455,"path":456,"stem":457,"icon":439},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":459,"icon":460,"path":461,"stem":462,"children":463,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[464,467,472,477,480],{"title":41,"path":465,"stem":466,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":468,"path":469,"stem":470,"icon":471},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":473,"path":474,"stem":475,"icon":476},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":441,"path":478,"stem":479,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":420,"path":481,"stem":482,"icon":483},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":485,"path":486,"stem":487,"children":488,"page":34},"Extend","\u002Fextend","6.extend",[489,493,498,503,507,512,516,520,524,528,533,538],{"title":41,"path":490,"stem":491,"icon":492},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":494,"path":495,"stem":496,"icon":497},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":499,"path":500,"stem":501,"icon":502},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":504,"path":505,"stem":506,"icon":497},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":508,"path":509,"stem":510,"icon":511},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":420,"path":513,"stem":514,"icon":515},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":517,"path":518,"stem":519,"icon":492},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":521,"path":522,"stem":523,"icon":448},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":525,"path":526,"stem":527,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":529,"path":530,"stem":531,"icon":532},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":534,"path":535,"stem":536,"icon":537},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":539,"path":540,"stem":541,"icon":542},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":441,"path":544,"stem":545,"children":546,"page":34},"\u002Freference","7.reference",[547,551,556,559,564,568,573,577],{"title":41,"path":548,"stem":549,"icon":550},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":552,"path":553,"stem":554,"icon":555},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":388,"path":557,"stem":558,"icon":117},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":560,"path":561,"stem":562,"icon":563},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":565,"path":566,"stem":567,"icon":393},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":569,"path":570,"stem":571,"icon":572},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":574,"path":575,"stem":576,"icon":448},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":578,"path":579,"stem":580,"icon":581},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":583,"path":584,"stem":585,"children":586,"page":34},"Compare","\u002Fcompare","8.compare",[587,591,595,599,603],{"title":588,"path":589,"stem":590,"icon":572},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":592,"path":593,"stem":594,"icon":209},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":596,"path":597,"stem":598,"icon":572},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":600,"path":601,"stem":602,"icon":572},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":604,"path":605,"stem":606,"icon":572},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":608,"title":609,"body":610,"description":1896,"extension":1897,"links":1898,"meta":1906,"navigation":1907,"path":227,"seo":1908,"stem":228,"__hash__":1909},"docs\u002F4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub.md","NuxtHub Storage",{"type":611,"value":612,"toc":1878},"minimark",[613,621,668,673,676,703,708,712,792,799,822,825,831,945,958,961,991,1006,1010,1018,1028,1033,1043,1262,1279,1283,1286,1304,1311,1315,1323,1426,1430,1435,1438,1443,1525,1528,1591,1595,1602,1672,1681,1685,1688,1701,1708,1737,1740,1744,1755,1840,1846,1850,1857,1861,1874],[614,615,616,620],"p",{},[617,618,619],"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.",[622,623,626,629,654],"prompt",{":actions":624,"description":625,"icon":229},"[\"copy\",\"cursor\",\"claude\"]","Store evlog wide events in NuxtHub",[614,627,628],{},"Store evlog wide events in my NuxtHub database (self-hosted log retention).",[630,631,632,636,639,642,645,648,651],"ul",{},[633,634,635],"li",{},"Install both modules: pnpm add @nuxthub\u002Fcore @evlog\u002Fnuxthub",[633,637,638],{},"Add @nuxthub\u002Fcore and @evlog\u002Fnuxthub to nuxt.config.ts modules (in that order)",[633,640,641],{},"Enable hub.database = true in nuxt.config.ts",[633,643,644],{},"Configure evlog.nuxthub: { retentionDays, batchSize, ... } for retention and batching",[633,646,647],{},"Run database migrations so the wide-events table is created",[633,649,650],{},"Confirm wide events are written to my NuxtHub database after triggering a request",[633,652,653],{},"For production at scale, combine with an external drain (Axiom \u002F OTLP) for long-term storage",[614,655,656,657,663,664],{},"Docs: ",[658,659,660],"a",{"href":660,"rel":661},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub",[662],"nofollow","\nNuxtHub: ",[658,665,666],{"href":666,"rel":667},"https:\u002F\u002Fhub.nuxt.com",[662],[669,670,672],"h2",{"id":671},"why-self-hosted-logs","Why Self-Hosted Logs?",[614,674,675],{},"External logging services (Axiom, Datadog, etc.) are great for production at scale. But sometimes you want:",[630,677,678,685,691,697],{},[633,679,680,684],{},[681,682,683],"strong",{},"Zero external dependencies"," - logs stored in the same database as your app",[633,686,687,690],{},[681,688,689],{},"Full data ownership"," - no third-party access to your log data",[633,692,693,696],{},[681,694,695],{},"Free tier friendly"," - no per-event pricing, just your existing database",[633,698,699,702],{},[681,700,701],{},"Development & staging"," - full log visibility without paying for a service",[614,704,705,707],{},[617,706,619],{}," works as a drop-in drain. Your existing evlog setup stays the same, you just get a database-backed storage layer on top.",[669,709,711],{"id":710},"install","Install",[713,714,715,743,759,775],"code-group",{},[716,717,723],"pre",{"className":718,"code":719,"filename":720,"language":721,"meta":722,"style":722},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","pnpm","bash","",[617,724,725],{"__ignoreMap":722},[726,727,730,733,737,740],"span",{"class":728,"line":729},"line",1,[726,731,720],{"class":732},"sBMFI",[726,734,736],{"class":735},"sfazB"," add",[726,738,739],{"class":735}," @nuxthub\u002Fcore",[726,741,742],{"class":735}," @evlog\u002Fnuxthub\n",[716,744,747],{"className":718,"code":745,"filename":746,"language":721,"meta":722,"style":722},"bun add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","bun",[617,748,749],{"__ignoreMap":722},[726,750,751,753,755,757],{"class":728,"line":729},[726,752,746],{"class":732},[726,754,736],{"class":735},[726,756,739],{"class":735},[726,758,742],{"class":735},[716,760,763],{"className":718,"code":761,"filename":762,"language":721,"meta":722,"style":722},"yarn add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","yarn",[617,764,765],{"__ignoreMap":722},[726,766,767,769,771,773],{"class":728,"line":729},[726,768,762],{"class":732},[726,770,736],{"class":735},[726,772,739],{"class":735},[726,774,742],{"class":735},[716,776,779],{"className":718,"code":777,"filename":778,"language":721,"meta":722,"style":722},"npm install @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","npm",[617,780,781],{"__ignoreMap":722},[726,782,783,785,788,790],{"class":728,"line":729},[726,784,778],{"class":732},[726,786,787],{"class":735}," install",[726,789,739],{"class":735},[726,791,742],{"class":735},[614,793,794,795,798],{},"Or with ",[617,796,797],{},"nuxi",":",[716,800,803],{"className":718,"code":801,"filename":802,"language":721,"meta":722,"style":722},"npx nuxi module add @nuxthub\u002Fcore @evlog\u002Fnuxthub\n","Terminal",[617,804,805],{"__ignoreMap":722},[726,806,807,810,813,816,818,820],{"class":728,"line":729},[726,808,809],{"class":732},"npx",[726,811,812],{"class":735}," nuxi",[726,814,815],{"class":735}," module",[726,817,736],{"class":735},[726,819,739],{"class":735},[726,821,742],{"class":735},[669,823,431],{"id":824},"setup",[614,826,827,828,798],{},"Add the module to your ",[617,829,830],{},"nuxt.config.ts",[716,832,836],{"className":833,"code":834,"filename":830,"language":835,"meta":722,"style":722},"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",[617,837,838,859,895,902,913,930,936],{"__ignoreMap":722},[726,839,840,844,847,851,855],{"class":728,"line":729},[726,841,843],{"class":842},"s7zQu","export",[726,845,846],{"class":842}," default",[726,848,850],{"class":849},"s2Zo4"," defineNuxtConfig",[726,852,854],{"class":853},"sTEyZ","(",[726,856,858],{"class":857},"sMK4o","{\n",[726,860,862,866,868,871,874,877,879,882,885,887,889,892],{"class":728,"line":861},2,[726,863,865],{"class":864},"swJcz","  modules",[726,867,798],{"class":857},[726,869,870],{"class":853}," [",[726,872,873],{"class":857},"'",[726,875,876],{"class":735},"@nuxthub\u002Fcore",[726,878,873],{"class":857},[726,880,881],{"class":857},",",[726,883,884],{"class":857}," '",[726,886,619],{"class":735},[726,888,873],{"class":857},[726,890,891],{"class":853},"]",[726,893,894],{"class":857},",\n",[726,896,898],{"class":728,"line":897},3,[726,899,901],{"emptyLinePlaceholder":900},true,"\n",[726,903,905,908,910],{"class":728,"line":904},4,[726,906,907],{"class":864},"  evlog",[726,909,798],{"class":857},[726,911,912],{"class":857}," {\n",[726,914,916,919,921,923,926,928],{"class":728,"line":915},5,[726,917,918],{"class":864},"    retention",[726,920,798],{"class":857},[726,922,884],{"class":857},[726,924,925],{"class":735},"7d",[726,927,873],{"class":857},[726,929,894],{"class":857},[726,931,933],{"class":728,"line":932},6,[726,934,935],{"class":857},"  },\n",[726,937,939,942],{"class":728,"line":938},7,[726,940,941],{"class":857},"}",[726,943,944],{"class":853},")\n",[614,946,947,948,950,951,953,954,957],{},"Even if ",[617,949,619],{}," can auto-register missing modules, we recommend explicitly installing ",[617,952,876],{}," and registering it in ",[617,955,956],{},"modules"," for a clearer and more predictable setup.",[614,959,960],{},"That's it. The module automatically:",[962,963,964,974,981,988],"ol",{},[633,965,966,967,970,971,973],{},"Installs ",[617,968,969],{},"evlog\u002Fnuxt"," and ",[617,972,876],{}," if not already registered",[633,975,976,977,980],{},"Registers the ",[617,978,979],{},"evlog_events"," database schema with NuxtHub",[633,982,983,984,987],{},"Hooks into ",[617,985,986],{},"evlog:drain"," to store every event in the database",[633,989,990],{},"Schedules a cleanup task based on your retention policy",[992,993,995,998,999,1002,1003,1005],"callout",{"color":994,"icon":13},"info",[681,996,997],{},"Prerequisites:"," Your project must use ",[658,1000,226],{"href":666,"rel":1001},[662]," with a database configured. ",[617,1004,619],{}," uses Drizzle ORM to interact with the database.",[669,1007,1009],{"id":1008},"how-it-works","How It Works",[716,1011,1016],{"className":1012,"code":1014,"language":1015},[1013],"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",[617,1017,1014],{"__ignoreMap":722},[614,1019,1020,1021,1023,1024,1027],{},"Every wide event emitted by evlog is stored as a row in the ",[617,1022,979],{}," table. The drain plugin handles both single events and batches (when used with the ",[658,1025,1026],{"href":540},"pipeline",").",[1029,1030,1032],"h3",{"id":1031},"database-schema","Database Schema",[614,1034,1035,1036,1038,1039,1042],{},"The ",[617,1037,979],{}," table stores indexed columns for fast querying and a ",[617,1040,1041],{},"data"," JSON column for all remaining fields:",[1044,1045,1046,1062],"table",{},[1047,1048,1049],"thead",{},[1050,1051,1052,1056,1059],"tr",{},[1053,1054,1055],"th",{},"Column",[1053,1057,1058],{},"Type",[1053,1060,1061],{},"Description",[1063,1064,1065,1080,1094,1108,1122,1136,1150,1164,1179,1193,1207,1221,1235,1248],"tbody",{},[1050,1066,1067,1073,1077],{},[1068,1069,1070],"td",{},[617,1071,1072],{},"id",[1068,1074,1075],{},[617,1076,1015],{},[1068,1078,1079],{},"UUID primary key",[1050,1081,1082,1087,1091],{},[1068,1083,1084],{},[617,1085,1086],{},"timestamp",[1068,1088,1089],{},[617,1090,1015],{},[1068,1092,1093],{},"Event timestamp",[1050,1095,1096,1101,1105],{},[1068,1097,1098],{},[617,1099,1100],{},"level",[1068,1102,1103],{},[617,1104,1015],{},[1068,1106,1107],{},"Log level (info, warn, error, debug)",[1050,1109,1110,1115,1119],{},[1068,1111,1112],{},[617,1113,1114],{},"service",[1068,1116,1117],{},[617,1118,1015],{},[1068,1120,1121],{},"Service name",[1050,1123,1124,1129,1133],{},[1068,1125,1126],{},[617,1127,1128],{},"environment",[1068,1130,1131],{},[617,1132,1015],{},[1068,1134,1135],{},"Environment (production, staging, etc.)",[1050,1137,1138,1143,1147],{},[1068,1139,1140],{},[617,1141,1142],{},"method",[1068,1144,1145],{},[617,1146,1015],{},[1068,1148,1149],{},"HTTP method",[1050,1151,1152,1157,1161],{},[1068,1153,1154],{},[617,1155,1156],{},"path",[1068,1158,1159],{},[617,1160,1015],{},[1068,1162,1163],{},"Request path",[1050,1165,1166,1171,1176],{},[1068,1167,1168],{},[617,1169,1170],{},"status",[1068,1172,1173],{},[617,1174,1175],{},"integer",[1068,1177,1178],{},"HTTP status code",[1050,1180,1181,1186,1190],{},[1068,1182,1183],{},[617,1184,1185],{},"duration_ms",[1068,1187,1188],{},[617,1189,1175],{},[1068,1191,1192],{},"Request duration in milliseconds",[1050,1194,1195,1200,1204],{},[1068,1196,1197],{},[617,1198,1199],{},"request_id",[1068,1201,1202],{},[617,1203,1015],{},[1068,1205,1206],{},"Request correlation ID",[1050,1208,1209,1214,1218],{},[1068,1210,1211],{},[617,1212,1213],{},"source",[1068,1215,1216],{},[617,1217,1015],{},[1068,1219,1220],{},"Event source (server, client)",[1050,1222,1223,1228,1232],{},[1068,1224,1225],{},[617,1226,1227],{},"error",[1068,1229,1230],{},[617,1231,1015],{},[1068,1233,1234],{},"Error details (JSON string)",[1050,1236,1237,1241,1245],{},[1068,1238,1239],{},[617,1240,1041],{},[1068,1242,1243],{},[617,1244,1015],{},[1068,1246,1247],{},"All remaining event fields (JSON)",[1050,1249,1250,1255,1259],{},[1068,1251,1252],{},[617,1253,1254],{},"created_at",[1068,1256,1257],{},[617,1258,1015],{},[1068,1260,1261],{},"Row insertion timestamp",[614,1263,1264,1265,1267,1268,1267,1270,1267,1272,1267,1274,1267,1276,1278],{},"Indexed columns: ",[617,1266,1086],{},", ",[617,1269,1100],{},[617,1271,1114],{},[617,1273,1170],{},[617,1275,1199],{},[617,1277,1254],{},".",[1029,1280,1282],{"id":1281},"dialect-support","Dialect Support",[614,1284,1285],{},"The schema is automatically registered for your NuxtHub database dialect:",[630,1287,1288,1294,1299],{},[633,1289,1290,1293],{},[681,1291,1292],{},"SQLite"," (default for Cloudflare D1)",[633,1295,1296],{},[681,1297,1298],{},"MySQL",[633,1300,1301],{},[681,1302,1303],{},"PostgreSQL",[614,1305,1306,1307,1310],{},"The correct schema is selected via the ",[617,1308,1309],{},"hub:db:schema:extend"," hook based on your NuxtHub configuration.",[669,1312,1314],{"id":1313},"combining-with-external-adapters","Combining with External Adapters",[614,1316,1317,1319,1320,1322],{},[617,1318,619],{}," doesn't replace external adapters, you can use both. The module registers its own ",[617,1321,986],{}," hook, so any other drain plugins you have will still work:",[716,1324,1327],{"className":833,"code":1325,"filename":1326,"language":835,"meta":722,"style":722},"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",[617,1328,1329,1354,1358,1384,1390,1420],{"__ignoreMap":722},[726,1330,1331,1334,1337,1340,1343,1346,1348,1351],{"class":728,"line":729},[726,1332,1333],{"class":842},"import",[726,1335,1336],{"class":857}," {",[726,1338,1339],{"class":853}," createAxiomDrain",[726,1341,1342],{"class":857}," }",[726,1344,1345],{"class":842}," from",[726,1347,884],{"class":857},[726,1349,1350],{"class":735},"evlog\u002Faxiom",[726,1352,1353],{"class":857},"'\n",[726,1355,1356],{"class":728,"line":861},[726,1357,901],{"emptyLinePlaceholder":900},[726,1359,1360,1362,1364,1367,1369,1371,1375,1378,1382],{"class":728,"line":897},[726,1361,843],{"class":842},[726,1363,846],{"class":842},[726,1365,1366],{"class":849}," defineNitroPlugin",[726,1368,854],{"class":853},[726,1370,854],{"class":857},[726,1372,1374],{"class":1373},"sHdIc","nitroApp",[726,1376,1377],{"class":857},")",[726,1379,1381],{"class":1380},"spNyl"," =>",[726,1383,912],{"class":857},[726,1385,1386],{"class":728,"line":904},[726,1387,1389],{"class":1388},"sHwdD","  \u002F\u002F This runs alongside @evlog\u002Fnuxthub's built-in drain\n",[726,1391,1392,1395,1397,1400,1402,1405,1407,1409,1411,1413,1415,1417],{"class":728,"line":915},[726,1393,1394],{"class":853},"  nitroApp",[726,1396,1278],{"class":857},[726,1398,1399],{"class":853},"hooks",[726,1401,1278],{"class":857},[726,1403,1404],{"class":849},"hook",[726,1406,854],{"class":864},[726,1408,873],{"class":857},[726,1410,986],{"class":735},[726,1412,873],{"class":857},[726,1414,881],{"class":857},[726,1416,1339],{"class":849},[726,1418,1419],{"class":864},"())\n",[726,1421,1422,1424],{"class":728,"line":932},[726,1423,941],{"class":857},[726,1425,944],{"class":853},[669,1427,1429],{"id":1428},"retention","Retention",[614,1431,1432,1434],{},[617,1433,619],{}," automatically deletes old events based on your retention policy. No manual cleanup needed.",[1029,1436,552],{"id":1437},"configuration",[614,1439,1440,1441,798],{},"Set the retention period in your ",[617,1442,830],{},[716,1444,1446],{"className":833,"code":1445,"filename":830,"language":835,"meta":722,"style":722},"export default defineNuxtConfig({\n  modules: ['@nuxthub\u002Fcore', '@evlog\u002Fnuxthub'],\n\n  evlog: {\n    retention: '7d', \u002F\u002F default\n  },\n})\n",[617,1447,1448,1460,1486,1490,1498,1515,1519],{"__ignoreMap":722},[726,1449,1450,1452,1454,1456,1458],{"class":728,"line":729},[726,1451,843],{"class":842},[726,1453,846],{"class":842},[726,1455,850],{"class":849},[726,1457,854],{"class":853},[726,1459,858],{"class":857},[726,1461,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484],{"class":728,"line":861},[726,1463,865],{"class":864},[726,1465,798],{"class":857},[726,1467,870],{"class":853},[726,1469,873],{"class":857},[726,1471,876],{"class":735},[726,1473,873],{"class":857},[726,1475,881],{"class":857},[726,1477,884],{"class":857},[726,1479,619],{"class":735},[726,1481,873],{"class":857},[726,1483,891],{"class":853},[726,1485,894],{"class":857},[726,1487,1488],{"class":728,"line":897},[726,1489,901],{"emptyLinePlaceholder":900},[726,1491,1492,1494,1496],{"class":728,"line":904},[726,1493,907],{"class":864},[726,1495,798],{"class":857},[726,1497,912],{"class":857},[726,1499,1500,1502,1504,1506,1508,1510,1512],{"class":728,"line":915},[726,1501,918],{"class":864},[726,1503,798],{"class":857},[726,1505,884],{"class":857},[726,1507,925],{"class":735},[726,1509,873],{"class":857},[726,1511,881],{"class":857},[726,1513,1514],{"class":1388}," \u002F\u002F default\n",[726,1516,1517],{"class":728,"line":932},[726,1518,935],{"class":857},[726,1520,1521,1523],{"class":728,"line":938},[726,1522,941],{"class":857},[726,1524,944],{"class":853},[614,1526,1527],{},"The retention value is a number followed by a unit:",[1044,1529,1530,1542],{},[1047,1531,1532],{},[1050,1533,1534,1537,1539],{},[1053,1535,1536],{},"Unit",[1053,1538,1061],{},[1053,1540,1541],{},"Example",[1063,1543,1544,1559,1575],{},[1050,1545,1546,1551,1554],{},[1068,1547,1548],{},[617,1549,1550],{},"d",[1068,1552,1553],{},"Days",[1068,1555,1556,1558],{},[617,1557,925],{}," = 7 days",[1050,1560,1561,1566,1569],{},[1068,1562,1563],{},[617,1564,1565],{},"h",[1068,1567,1568],{},"Hours",[1068,1570,1571,1574],{},[617,1572,1573],{},"24h"," = 24 hours",[1050,1576,1577,1582,1585],{},[1068,1578,1579],{},[617,1580,1581],{},"m",[1068,1583,1584],{},"Minutes",[1068,1586,1587,1590],{},[617,1588,1589],{},"60m"," = 60 minutes",[1029,1592,1594],{"id":1593},"how-cleanup-works","How Cleanup Works",[614,1596,1597,1598,1601],{},"The module registers a Nitro scheduled task (",[617,1599,1600],{},"evlog:cleanup",") that runs on a cron schedule derived from your retention value. The cron frequency is set to roughly half the retention period:",[1044,1603,1604,1615],{},[1047,1605,1606],{},[1050,1607,1608,1610,1613],{},[1053,1609,1429],{},[1053,1611,1612],{},"Cron Schedule",[1053,1614,1061],{},[1063,1616,1617,1631,1645,1659],{},[1050,1618,1619,1623,1628],{},[1068,1620,1621],{},[617,1622,1589],{},[1068,1624,1625],{},[617,1626,1627],{},"*\u002F30 * * * *",[1068,1629,1630],{},"Every 30 minutes",[1050,1632,1633,1637,1642],{},[1068,1634,1635],{},[617,1636,1573],{},[1068,1638,1639],{},[617,1640,1641],{},"0 *\u002F12 * * *",[1068,1643,1644],{},"Every 12 hours",[1050,1646,1647,1651,1656],{},[1068,1648,1649],{},[617,1650,925],{},[1068,1652,1653],{},[617,1654,1655],{},"0 3 * * *",[1068,1657,1658],{},"Daily at 3:00 AM",[1050,1660,1661,1666,1670],{},[1068,1662,1663],{},[617,1664,1665],{},"30d",[1068,1667,1668],{},[617,1669,1655],{},[1068,1671,1658],{},[614,1673,1674,1675,1677,1678,1680],{},"The cleanup task deletes all rows in ",[617,1676,979],{}," where ",[617,1679,1254],{}," is older than the retention period.",[1029,1682,1684],{"id":1683},"manual-cleanup","Manual Cleanup",[614,1686,1687],{},"You can trigger cleanup manually via the API endpoint:",[716,1689,1691],{"className":718,"code":1690,"filename":802,"language":721,"meta":722,"style":722},"curl https:\u002F\u002Fyour-app.com\u002Fapi\u002F_cron\u002Fevlog-cleanup\n",[617,1692,1693],{"__ignoreMap":722},[726,1694,1695,1698],{"class":728,"line":729},[726,1696,1697],{"class":732},"curl",[726,1699,1700],{"class":735}," https:\u002F\u002Fyour-app.com\u002Fapi\u002F_cron\u002Fevlog-cleanup\n",[614,1702,1703,1704,1707],{},"If the ",[617,1705,1706],{},"CRON_SECRET"," environment variable is set, the endpoint requires a Bearer token:",[716,1709,1711],{"className":718,"code":1710,"filename":802,"language":721,"meta":722,"style":722},"curl -H \"Authorization: Bearer your-secret\" \\\n  https:\u002F\u002Fyour-app.com\u002Fapi\u002F_cron\u002Fevlog-cleanup\n",[617,1712,1713,1732],{"__ignoreMap":722},[726,1714,1715,1717,1720,1723,1726,1729],{"class":728,"line":729},[726,1716,1697],{"class":732},[726,1718,1719],{"class":735}," -H",[726,1721,1722],{"class":857}," \"",[726,1724,1725],{"class":735},"Authorization: Bearer your-secret",[726,1727,1728],{"class":857},"\"",[726,1730,1731],{"class":853}," \\\n",[726,1733,1734],{"class":728,"line":861},[726,1735,1736],{"class":735},"  https:\u002F\u002Fyour-app.com\u002Fapi\u002F_cron\u002Fevlog-cleanup\n",[614,1738,1739],{},"This is recommended for production deployments to prevent unauthorized cleanup triggers.",[1029,1741,1743],{"id":1742},"vercel-cron","Vercel Cron",[614,1745,1746,1747,1750,1751,1754],{},"When installing the module with ",[617,1748,1749],{},"nuxi module add",", you'll be prompted to create a ",[617,1752,1753],{},"vercel.json"," with the appropriate cron schedule:",[716,1756,1760],{"className":1757,"code":1758,"filename":1753,"language":1759,"meta":722,"style":722},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"crons\": [\n    {\n      \"path\": \"\u002Fapi\u002F_cron\u002Fevlog-cleanup\",\n      \"schedule\": \"0 3 * * *\"\n    }\n  ]\n}\n","json",[617,1761,1762,1766,1781,1786,1806,1824,1829,1834],{"__ignoreMap":722},[726,1763,1764],{"class":728,"line":729},[726,1765,858],{"class":857},[726,1767,1768,1771,1774,1776,1778],{"class":728,"line":861},[726,1769,1770],{"class":857},"  \"",[726,1772,1773],{"class":1380},"crons",[726,1775,1728],{"class":857},[726,1777,798],{"class":857},[726,1779,1780],{"class":857}," [\n",[726,1782,1783],{"class":728,"line":897},[726,1784,1785],{"class":857},"    {\n",[726,1787,1788,1791,1793,1795,1797,1799,1802,1804],{"class":728,"line":904},[726,1789,1790],{"class":857},"      \"",[726,1792,1156],{"class":732},[726,1794,1728],{"class":857},[726,1796,798],{"class":857},[726,1798,1722],{"class":857},[726,1800,1801],{"class":735},"\u002Fapi\u002F_cron\u002Fevlog-cleanup",[726,1803,1728],{"class":857},[726,1805,894],{"class":857},[726,1807,1808,1810,1813,1815,1817,1819,1821],{"class":728,"line":915},[726,1809,1790],{"class":857},[726,1811,1812],{"class":732},"schedule",[726,1814,1728],{"class":857},[726,1816,798],{"class":857},[726,1818,1722],{"class":857},[726,1820,1655],{"class":735},[726,1822,1823],{"class":857},"\"\n",[726,1825,1826],{"class":728,"line":932},[726,1827,1828],{"class":857},"    }\n",[726,1830,1831],{"class":728,"line":938},[726,1832,1833],{"class":857},"  ]\n",[726,1835,1837],{"class":728,"line":1836},8,[726,1838,1839],{"class":857},"}\n",[614,1841,1842,1843,1845],{},"On Vercel, the ",[617,1844,1706],{}," environment variable is automatically set and validated.",[1029,1847,1849],{"id":1848},"cloudflare-other-platforms","Cloudflare & Other Platforms",[614,1851,1852,1853,1856],{},"On Cloudflare Workers and other platforms, the Nitro scheduled task handles cleanup automatically without any additional cron configuration. The task is registered with ",[617,1854,1855],{},"experimental.tasks"," enabled in the Nitro config.",[669,1858,1860],{"id":1859},"next-steps","Next Steps",[630,1862,1863,1868],{},[633,1864,1865,1867],{},[658,1866,153],{"href":158}," - Send logs to external services alongside NuxtHub storage",[633,1869,1870,1873],{},[658,1871,1872],{"href":540},"Pipeline"," - Batch events for better database performance",[1875,1876,1877],"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":722,"searchDepth":861,"depth":861,"links":1879},[1880,1881,1882,1883,1887,1888,1895],{"id":671,"depth":861,"text":672},{"id":710,"depth":861,"text":711},{"id":824,"depth":861,"text":431},{"id":1008,"depth":861,"text":1009,"children":1884},[1885,1886],{"id":1031,"depth":897,"text":1032},{"id":1281,"depth":897,"text":1282},{"id":1313,"depth":861,"text":1314},{"id":1428,"depth":861,"text":1429,"children":1889},[1890,1891,1892,1893,1894],{"id":1437,"depth":897,"text":552},{"id":1593,"depth":897,"text":1594},{"id":1683,"depth":897,"text":1684},{"id":1742,"depth":897,"text":1743},{"id":1848,"depth":897,"text":1849},{"id":1859,"depth":861,"text":1860},"Self-hosted retention using NuxtHub database storage. Store, query, and clean up your wide events with no external dependency.","md",[1899,1904],{"label":226,"icon":1900,"to":666,"target":1901,"color":1902,"variant":1903},"i-lucide-external-link","_blank","neutral","subtle",{"label":153,"icon":1905,"to":158,"color":1902,"variant":1903},"i-custom-plug",{},{"title":226,"icon":229},{"title":609,"description":1896},"_yAHAmBiuXfW9o7NHrF_d8DGxzKhA4IpUe29RVsgaoc",[1911,1913],{"title":221,"path":222,"stem":223,"description":1912,"icon":224,"children":-1},"Write wide events to the local file system as NDJSON for local debugging, AI agent integration, and production backup.",{"title":231,"path":232,"stem":233,"description":1914,"icon":234,"children":-1},"Store wide events in an in-memory ring buffer. Works in any runtime — including Cloudflare Workers (workerd) — where the file system is unavailable.",1791113181254]