[{"data":1,"prerenderedAt":3767},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nuxt":439,"-integrate-frameworks-nuxt-surround":3762},[4,30,80,245,353,408],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"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",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"children":249,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[250,254,259,288,316,348],{"title":36,"path":251,"stem":252,"icon":253},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":255,"path":256,"stem":257,"icon":258},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[265,268,273,278,283],{"title":36,"path":266,"stem":267,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":269,"path":270,"stem":271,"icon":272},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":274,"path":275,"stem":276,"icon":277},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":279,"path":280,"stem":281,"icon":282},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":284,"path":285,"stem":286,"icon":287},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":289,"icon":290,"path":291,"stem":292,"children":293,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[294,297,302,307,311],{"title":36,"path":295,"stem":296,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":298,"path":299,"stem":300,"icon":301},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":303,"path":304,"stem":305,"icon":306},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":308,"path":309,"stem":310,"icon":258},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":312,"path":313,"stem":314,"icon":315},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":317,"icon":318,"path":319,"stem":320,"children":321,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[322,325,330,335,340,344],{"title":36,"path":323,"stem":324,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":326,"path":327,"stem":328,"icon":329},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":331,"path":332,"stem":333,"icon":334},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":336,"path":337,"stem":338,"icon":339},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":341,"path":342,"stem":343,"icon":318},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":345,"path":346,"stem":347,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"children":357,"page":29},"Extend","\u002Fextend","5.extend",[358,362,367,372,377,381,385,389,393,398,403],{"title":36,"path":359,"stem":360,"icon":361},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":363,"path":364,"stem":365,"icon":366},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":368,"path":369,"stem":370,"icon":371},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":373,"path":374,"stem":375,"icon":376},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":378,"stem":379,"icon":380},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":382,"path":383,"stem":384,"icon":361},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":386,"path":387,"stem":388,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":390,"path":391,"stem":392,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":394,"path":395,"stem":396,"icon":397},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":399,"path":400,"stem":401,"icon":402},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":404,"path":405,"stem":406,"icon":407},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":409,"path":410,"stem":411,"children":412,"page":29},"Reference","\u002Freference","6.reference",[413,418,421,426,430,435],{"title":414,"path":415,"stem":416,"icon":417},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":419,"stem":420,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":422,"path":423,"stem":424,"icon":425},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":427,"path":428,"stem":429,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":431,"path":432,"stem":433,"icon":434},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":436,"path":437,"stem":438,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":440,"title":167,"body":441,"description":3755,"extension":3756,"links":3757,"meta":3758,"navigation":3759,"path":168,"seo":3760,"stem":169,"__hash__":3761},"docs\u002F3.integrate\u002Fframeworks\u002F01.nuxt.md",{"type":442,"value":443,"toc":3727},"minimark",[444,461,508,512,517,588,592,708,718,721,728,1083,1086,1164,1168,1183,1441,1457,1460,1480,1490,1763,1784,1830,1834,1843,1975,1988,1992,1995,2162,2166,2169,2173,2411,2415,2622,2631,2633,2637,2640,2767,2770,2774,2777,2921,2925,2932,3085,3092,3096,3099,3192,3196,3225,3229,3235,3340,3344,3347,3480,3484,3491,3684,3688,3694,3723],[445,446,447,448,452,453,456,457,460],"p",{},"evlog provides a first-class Nuxt module with auto-imported ",[449,450,451],"code",{},"useLogger",", ",[449,454,455],{},"createError",", and ",[449,458,459],{},"parseError",". Add it to your config and start logging with zero boilerplate.",[462,463,466,469,494],"prompt",{":actions":464,"description":465,"icon":170},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Nuxt app",[445,467,468],{},"Set up evlog in my Nuxt app with wide events and structured errors.",[470,471,472,476,479,482,485,488,491],"ul",{},[473,474,475],"li",{},"Install evlog: pnpm add evlog",[473,477,478],{},"Add 'evlog\u002Fnuxt' to modules in nuxt.config.ts",[473,480,481],{},"Set evlog.env.service to my app name",[473,483,484],{},"useLogger, createError, and parseError are auto-imported",[473,486,487],{},"Create a server\u002Fapi route using useLogger(event) and log.set() to build a wide event",[473,489,490],{},"Throw errors with createError({ message, status, why, fix })",[473,492,493],{},"Wide events are auto-emitted when each request completes",[445,495,496,497,503,504],{},"Docs: ",[498,499,500],"a",{"href":500,"rel":501},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Fnuxt",[502],"nofollow","\nAdapters: ",[498,505,506],{"href":506,"rel":507},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[502],[509,510,25],"h2",{"id":511},"quick-start",[513,514,516],"h3",{"id":515},"_1-install","1. Install",[518,519,520,545,559,573],"code-group",{},[521,522,528],"pre",{"className":523,"code":524,"filename":525,"language":526,"meta":527,"style":527},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[449,529,530],{"__ignoreMap":527},[531,532,535,538,542],"span",{"class":533,"line":534},"line",1,[531,536,525],{"class":537},"sBMFI",[531,539,541],{"class":540},"sfazB"," add",[531,543,544],{"class":540}," evlog\n",[521,546,549],{"className":523,"code":547,"filename":548,"language":526,"meta":527,"style":527},"bun add evlog\n","bun",[449,550,551],{"__ignoreMap":527},[531,552,553,555,557],{"class":533,"line":534},[531,554,548],{"class":537},[531,556,541],{"class":540},[531,558,544],{"class":540},[521,560,563],{"className":523,"code":561,"filename":562,"language":526,"meta":527,"style":527},"yarn add evlog\n","yarn",[449,564,565],{"__ignoreMap":527},[531,566,567,569,571],{"class":533,"line":534},[531,568,562],{"class":537},[531,570,541],{"class":540},[531,572,544],{"class":540},[521,574,577],{"className":523,"code":575,"filename":576,"language":526,"meta":527,"style":527},"npm install evlog\n","npm",[449,578,579],{"__ignoreMap":527},[531,580,581,583,586],{"class":533,"line":534},[531,582,576],{"class":537},[531,584,585],{"class":540}," install",[531,587,544],{"class":540},[513,589,591],{"id":590},"_2-add-the-module","2. Add the module",[521,593,598],{"className":594,"code":595,"filename":596,"language":597,"meta":527,"style":527},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: {\n      service: 'my-app',\n    },\n  },\n})\n","nuxt.config.ts","typescript",[449,599,600,621,648,659,669,687,693,699],{"__ignoreMap":527},[531,601,602,606,609,613,617],{"class":533,"line":534},[531,603,605],{"class":604},"s7zQu","export",[531,607,608],{"class":604}," default",[531,610,612],{"class":611},"s2Zo4"," defineNuxtConfig",[531,614,616],{"class":615},"sTEyZ","(",[531,618,620],{"class":619},"sMK4o","{\n",[531,622,624,628,631,634,637,640,642,645],{"class":533,"line":623},2,[531,625,627],{"class":626},"swJcz","  modules",[531,629,630],{"class":619},":",[531,632,633],{"class":615}," [",[531,635,636],{"class":619},"'",[531,638,639],{"class":540},"evlog\u002Fnuxt",[531,641,636],{"class":619},[531,643,644],{"class":615},"]",[531,646,647],{"class":619},",\n",[531,649,651,654,656],{"class":533,"line":650},3,[531,652,653],{"class":626},"  evlog",[531,655,630],{"class":619},[531,657,658],{"class":619}," {\n",[531,660,662,665,667],{"class":533,"line":661},4,[531,663,664],{"class":626},"    env",[531,666,630],{"class":619},[531,668,658],{"class":619},[531,670,672,675,677,680,683,685],{"class":533,"line":671},5,[531,673,674],{"class":626},"      service",[531,676,630],{"class":619},[531,678,679],{"class":619}," '",[531,681,682],{"class":540},"my-app",[531,684,636],{"class":619},[531,686,647],{"class":619},[531,688,690],{"class":533,"line":689},6,[531,691,692],{"class":619},"    },\n",[531,694,696],{"class":533,"line":695},7,[531,697,698],{"class":619},"  },\n",[531,700,702,705],{"class":533,"line":701},8,[531,703,704],{"class":619},"}",[531,706,707],{"class":615},")\n",[445,709,710,711,452,713,456,715,717],{},"That's it. ",[449,712,451],{},[449,714,455],{},[449,716,459],{}," are auto-imported.",[509,719,46],{"id":720},"wide-events",[445,722,723,724,727],{},"Build up context progressively throughout a request with ",[449,725,726],{},"useLogger(event)",". evlog emits a single wide event when the request completes.",[521,729,732],{"className":594,"code":730,"filename":731,"language":597,"meta":527,"style":527},"export default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ user: { id: body.userId, plan: 'enterprise' } })\n\n  const cart = await db.findCart(body.cartId)\n  log.set({ cart: { items: cart.items.length, total: cart.total } })\n\n  const payment = await processPayment(cart)\n  log.set({ payment: { method: payment.method, cardLast4: payment.last4 } })\n\n  return { success: true, orderId: payment.orderId }\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[449,733,734,764,784,805,811,869,873,904,959,964,986,1037,1042,1076],{"__ignoreMap":527},[531,735,736,738,740,743,745,749,752,756,759,762],{"class":533,"line":534},[531,737,605],{"class":604},[531,739,608],{"class":604},[531,741,742],{"class":611}," defineEventHandler",[531,744,616],{"class":615},[531,746,748],{"class":747},"spNyl","async",[531,750,751],{"class":619}," (",[531,753,755],{"class":754},"sHdIc","event",[531,757,758],{"class":619},")",[531,760,761],{"class":747}," =>",[531,763,658],{"class":619},[531,765,766,769,772,775,778,780,782],{"class":533,"line":623},[531,767,768],{"class":747},"  const",[531,770,771],{"class":615}," log",[531,773,774],{"class":619}," =",[531,776,777],{"class":611}," useLogger",[531,779,616],{"class":626},[531,781,755],{"class":615},[531,783,707],{"class":626},[531,785,786,788,791,793,796,799,801,803],{"class":533,"line":650},[531,787,768],{"class":747},[531,789,790],{"class":615}," body",[531,792,774],{"class":619},[531,794,795],{"class":604}," await",[531,797,798],{"class":611}," readBody",[531,800,616],{"class":626},[531,802,755],{"class":615},[531,804,707],{"class":626},[531,806,807],{"class":533,"line":661},[531,808,810],{"emptyLinePlaceholder":809},true,"\n",[531,812,813,816,819,822,824,827,830,832,835,838,840,842,844,847,850,853,855,857,860,862,865,867],{"class":533,"line":671},[531,814,815],{"class":615},"  log",[531,817,818],{"class":619},".",[531,820,821],{"class":611},"set",[531,823,616],{"class":626},[531,825,826],{"class":619},"{",[531,828,829],{"class":626}," user",[531,831,630],{"class":619},[531,833,834],{"class":619}," {",[531,836,837],{"class":626}," id",[531,839,630],{"class":619},[531,841,790],{"class":615},[531,843,818],{"class":619},[531,845,846],{"class":615},"userId",[531,848,849],{"class":619},",",[531,851,852],{"class":626}," plan",[531,854,630],{"class":619},[531,856,679],{"class":619},[531,858,859],{"class":540},"enterprise",[531,861,636],{"class":619},[531,863,864],{"class":619}," }",[531,866,864],{"class":619},[531,868,707],{"class":626},[531,870,871],{"class":533,"line":689},[531,872,810],{"emptyLinePlaceholder":809},[531,874,875,877,880,882,884,887,889,892,894,897,899,902],{"class":533,"line":695},[531,876,768],{"class":747},[531,878,879],{"class":615}," cart",[531,881,774],{"class":619},[531,883,795],{"class":604},[531,885,886],{"class":615}," db",[531,888,818],{"class":619},[531,890,891],{"class":611},"findCart",[531,893,616],{"class":626},[531,895,896],{"class":615},"body",[531,898,818],{"class":619},[531,900,901],{"class":615},"cartId",[531,903,707],{"class":626},[531,905,906,908,910,912,914,916,918,920,922,925,927,929,931,934,936,939,941,944,946,948,950,953,955,957],{"class":533,"line":701},[531,907,815],{"class":615},[531,909,818],{"class":619},[531,911,821],{"class":611},[531,913,616],{"class":626},[531,915,826],{"class":619},[531,917,879],{"class":626},[531,919,630],{"class":619},[531,921,834],{"class":619},[531,923,924],{"class":626}," items",[531,926,630],{"class":619},[531,928,879],{"class":615},[531,930,818],{"class":619},[531,932,933],{"class":615},"items",[531,935,818],{"class":619},[531,937,938],{"class":615},"length",[531,940,849],{"class":619},[531,942,943],{"class":626}," total",[531,945,630],{"class":619},[531,947,879],{"class":615},[531,949,818],{"class":619},[531,951,952],{"class":615},"total",[531,954,864],{"class":619},[531,956,864],{"class":619},[531,958,707],{"class":626},[531,960,962],{"class":533,"line":961},9,[531,963,810],{"emptyLinePlaceholder":809},[531,965,967,969,972,974,976,979,981,984],{"class":533,"line":966},10,[531,968,768],{"class":747},[531,970,971],{"class":615}," payment",[531,973,774],{"class":619},[531,975,795],{"class":604},[531,977,978],{"class":611}," processPayment",[531,980,616],{"class":626},[531,982,983],{"class":615},"cart",[531,985,707],{"class":626},[531,987,989,991,993,995,997,999,1001,1003,1005,1008,1010,1012,1014,1017,1019,1022,1024,1026,1028,1031,1033,1035],{"class":533,"line":988},11,[531,990,815],{"class":615},[531,992,818],{"class":619},[531,994,821],{"class":611},[531,996,616],{"class":626},[531,998,826],{"class":619},[531,1000,971],{"class":626},[531,1002,630],{"class":619},[531,1004,834],{"class":619},[531,1006,1007],{"class":626}," method",[531,1009,630],{"class":619},[531,1011,971],{"class":615},[531,1013,818],{"class":619},[531,1015,1016],{"class":615},"method",[531,1018,849],{"class":619},[531,1020,1021],{"class":626}," cardLast4",[531,1023,630],{"class":619},[531,1025,971],{"class":615},[531,1027,818],{"class":619},[531,1029,1030],{"class":615},"last4",[531,1032,864],{"class":619},[531,1034,864],{"class":619},[531,1036,707],{"class":626},[531,1038,1040],{"class":533,"line":1039},12,[531,1041,810],{"emptyLinePlaceholder":809},[531,1043,1045,1048,1050,1053,1055,1059,1061,1064,1066,1068,1070,1073],{"class":533,"line":1044},13,[531,1046,1047],{"class":604},"  return",[531,1049,834],{"class":619},[531,1051,1052],{"class":626}," success",[531,1054,630],{"class":619},[531,1056,1058],{"class":1057},"sfNiH"," true",[531,1060,849],{"class":619},[531,1062,1063],{"class":626}," orderId",[531,1065,630],{"class":619},[531,1067,971],{"class":615},[531,1069,818],{"class":619},[531,1071,1072],{"class":615},"orderId",[531,1074,1075],{"class":619}," }\n",[531,1077,1079,1081],{"class":533,"line":1078},14,[531,1080,704],{"class":619},[531,1082,707],{"class":615},[445,1084,1085],{},"One request, one log line with all context:",[521,1087,1090],{"className":523,"code":1088,"filename":1089,"language":526,"meta":527,"style":527},"10:23:45 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n  ├─ user: id=usr_123 plan=enterprise\n  ├─ cart: items=3 total=14999\n  ├─ payment: method=card cardLast4=4242\n  └─ requestId: a1b2c3d4-...\n","Terminal output",[449,1091,1092,1103,1117,1137,1153],{"__ignoreMap":527},[531,1093,1094,1097,1100],{"class":533,"line":534},[531,1095,1096],{"class":537},"10:23:45",[531,1098,1099],{"class":540}," INFO",[531,1101,1102],{"class":615}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[531,1104,1105,1108,1111,1114],{"class":533,"line":623},[531,1106,1107],{"class":537},"  ├─",[531,1109,1110],{"class":540}," user:",[531,1112,1113],{"class":540}," id=usr_123",[531,1115,1116],{"class":540}," plan=enterprise\n",[531,1118,1119,1121,1124,1127,1131,1134],{"class":533,"line":650},[531,1120,1107],{"class":537},[531,1122,1123],{"class":540}," cart:",[531,1125,1126],{"class":540}," items=",[531,1128,1130],{"class":1129},"sbssI","3",[531,1132,1133],{"class":540}," total=",[531,1135,1136],{"class":1129},"14999\n",[531,1138,1139,1141,1144,1147,1150],{"class":533,"line":661},[531,1140,1107],{"class":537},[531,1142,1143],{"class":540}," payment:",[531,1145,1146],{"class":540}," method=card",[531,1148,1149],{"class":540}," cardLast4=",[531,1151,1152],{"class":1129},"4242\n",[531,1154,1155,1158,1161],{"class":533,"line":671},[531,1156,1157],{"class":537},"  └─",[531,1159,1160],{"class":540}," requestId:",[531,1162,1163],{"class":540}," a1b2c3d4-...\n",[509,1165,1167],{"id":1166},"error-handling","Error Handling",[445,1169,1170,1172,1173,452,1176,456,1179,1182],{},[449,1171,455],{}," produces structured errors with ",[449,1174,1175],{},"why",[449,1177,1178],{},"fix",[449,1180,1181],{},"link"," fields that help both humans and AI agents understand what went wrong.",[521,1184,1187],{"className":594,"code":1185,"filename":1186,"language":597,"meta":527,"style":527},"export default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ payment: { amount: body.amount } })\n\n  if (body.amount \u003C= 0) {\n    throw createError({\n      status: 400,\n      message: 'Invalid payment amount',\n      why: 'The amount must be a positive number',\n      fix: 'Pass a positive integer in cents (e.g. 4999 for $49.99)',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount',\n    })\n  }\n\n  return { success: true }\n})\n","server\u002Fapi\u002Fpayment\u002Fprocess.post.ts",[449,1188,1189,1211,1227,1245,1249,1285,1289,1313,1325,1337,1353,1369,1385,1401,1408,1414,1419,1434],{"__ignoreMap":527},[531,1190,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209],{"class":533,"line":534},[531,1192,605],{"class":604},[531,1194,608],{"class":604},[531,1196,742],{"class":611},[531,1198,616],{"class":615},[531,1200,748],{"class":747},[531,1202,751],{"class":619},[531,1204,755],{"class":754},[531,1206,758],{"class":619},[531,1208,761],{"class":747},[531,1210,658],{"class":619},[531,1212,1213,1215,1217,1219,1221,1223,1225],{"class":533,"line":623},[531,1214,768],{"class":747},[531,1216,771],{"class":615},[531,1218,774],{"class":619},[531,1220,777],{"class":611},[531,1222,616],{"class":626},[531,1224,755],{"class":615},[531,1226,707],{"class":626},[531,1228,1229,1231,1233,1235,1237,1239,1241,1243],{"class":533,"line":650},[531,1230,768],{"class":747},[531,1232,790],{"class":615},[531,1234,774],{"class":619},[531,1236,795],{"class":604},[531,1238,798],{"class":611},[531,1240,616],{"class":626},[531,1242,755],{"class":615},[531,1244,707],{"class":626},[531,1246,1247],{"class":533,"line":661},[531,1248,810],{"emptyLinePlaceholder":809},[531,1250,1251,1253,1255,1257,1259,1261,1263,1265,1267,1270,1272,1274,1276,1279,1281,1283],{"class":533,"line":671},[531,1252,815],{"class":615},[531,1254,818],{"class":619},[531,1256,821],{"class":611},[531,1258,616],{"class":626},[531,1260,826],{"class":619},[531,1262,971],{"class":626},[531,1264,630],{"class":619},[531,1266,834],{"class":619},[531,1268,1269],{"class":626}," amount",[531,1271,630],{"class":619},[531,1273,790],{"class":615},[531,1275,818],{"class":619},[531,1277,1278],{"class":615},"amount",[531,1280,864],{"class":619},[531,1282,864],{"class":619},[531,1284,707],{"class":626},[531,1286,1287],{"class":533,"line":689},[531,1288,810],{"emptyLinePlaceholder":809},[531,1290,1291,1294,1296,1298,1300,1302,1305,1308,1311],{"class":533,"line":695},[531,1292,1293],{"class":604},"  if",[531,1295,751],{"class":626},[531,1297,896],{"class":615},[531,1299,818],{"class":619},[531,1301,1278],{"class":615},[531,1303,1304],{"class":619}," \u003C=",[531,1306,1307],{"class":1129}," 0",[531,1309,1310],{"class":626},") ",[531,1312,620],{"class":619},[531,1314,1315,1318,1321,1323],{"class":533,"line":701},[531,1316,1317],{"class":604},"    throw",[531,1319,1320],{"class":611}," createError",[531,1322,616],{"class":626},[531,1324,620],{"class":619},[531,1326,1327,1330,1332,1335],{"class":533,"line":961},[531,1328,1329],{"class":626},"      status",[531,1331,630],{"class":619},[531,1333,1334],{"class":1129}," 400",[531,1336,647],{"class":619},[531,1338,1339,1342,1344,1346,1349,1351],{"class":533,"line":966},[531,1340,1341],{"class":626},"      message",[531,1343,630],{"class":619},[531,1345,679],{"class":619},[531,1347,1348],{"class":540},"Invalid payment amount",[531,1350,636],{"class":619},[531,1352,647],{"class":619},[531,1354,1355,1358,1360,1362,1365,1367],{"class":533,"line":988},[531,1356,1357],{"class":626},"      why",[531,1359,630],{"class":619},[531,1361,679],{"class":619},[531,1363,1364],{"class":540},"The amount must be a positive number",[531,1366,636],{"class":619},[531,1368,647],{"class":619},[531,1370,1371,1374,1376,1378,1381,1383],{"class":533,"line":1039},[531,1372,1373],{"class":626},"      fix",[531,1375,630],{"class":619},[531,1377,679],{"class":619},[531,1379,1380],{"class":540},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[531,1382,636],{"class":619},[531,1384,647],{"class":619},[531,1386,1387,1390,1392,1394,1397,1399],{"class":533,"line":1044},[531,1388,1389],{"class":626},"      link",[531,1391,630],{"class":619},[531,1393,679],{"class":619},[531,1395,1396],{"class":540},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[531,1398,636],{"class":619},[531,1400,647],{"class":619},[531,1402,1403,1406],{"class":533,"line":1078},[531,1404,1405],{"class":619},"    }",[531,1407,707],{"class":626},[531,1409,1411],{"class":533,"line":1410},15,[531,1412,1413],{"class":619},"  }\n",[531,1415,1417],{"class":533,"line":1416},16,[531,1418,810],{"emptyLinePlaceholder":809},[531,1420,1422,1424,1426,1428,1430,1432],{"class":533,"line":1421},17,[531,1423,1047],{"class":604},[531,1425,834],{"class":619},[531,1427,1052],{"class":626},[531,1429,630],{"class":619},[531,1431,1058],{"class":1057},[531,1433,1075],{"class":619},[531,1435,1437,1439],{"class":533,"line":1436},18,[531,1438,704],{"class":619},[531,1440,707],{"class":615},[1442,1443,1445,1446,1449,1450,452,1452,456,1454,1456],"callout",{"color":1444,"icon":13},"info","Nuxt's error handler automatically catches ",[449,1447,1448],{},"EvlogError"," and returns a structured JSON response with ",[449,1451,1175],{},[449,1453,1178],{},[449,1455,1181],{}," fields.",[509,1458,414],{"id":1459},"configuration",[1442,1461,1462,1463,1466,1467,452,1470,452,1473,452,1476,1479],{"color":1444,"icon":79},"See the ",[498,1464,1465],{"href":415},"Configuration reference"," for the full list of shared options (",[449,1468,1469],{},"enabled",[449,1471,1472],{},"pretty",[449,1474,1475],{},"silent",[449,1477,1478],{},"sampling",", middleware options, etc.).",[445,1481,1482,1483,1485,1486,1489],{},"All options are set in ",[449,1484,596],{}," under the ",[449,1487,1488],{},"evlog"," key:",[1491,1492,1493,1512],"table",{},[1494,1495,1496],"thead",{},[1497,1498,1499,1503,1506,1509],"tr",{},[1500,1501,1502],"th",{},"Option",[1500,1504,1505],{},"Type",[1500,1507,1508],{},"Default",[1500,1510,1511],{},"Description",[1513,1514,1515,1539,1557,1577,1594,1617,1635,1654,1672,1690,1714,1732],"tbody",{},[1497,1516,1517,1522,1527,1532],{},[1518,1519,1520],"td",{},[449,1521,1469],{},[1518,1523,1524],{},[449,1525,1526],{},"boolean",[1518,1528,1529],{},[449,1530,1531],{},"true",[1518,1533,1534,1535,1538],{},"Globally enable\u002Fdisable all logging. When ",[449,1536,1537],{},"false",", all operations become no-ops",[1497,1540,1541,1546,1550,1554],{},[1518,1542,1543],{},[449,1544,1545],{},"console",[1518,1547,1548],{},[449,1549,1526],{},[1518,1551,1552],{},[449,1553,1531],{},[1518,1555,1556],{},"Enable\u002Fdisable browser console output",[1497,1558,1559,1564,1569,1574],{},[1518,1560,1561],{},[449,1562,1563],{},"env.service",[1518,1565,1566],{},[449,1567,1568],{},"string",[1518,1570,1571],{},[449,1572,1573],{},"'app'",[1518,1575,1576],{},"Service name shown in logs",[1497,1578,1579,1584,1588,1591],{},[1518,1580,1581],{},[449,1582,1583],{},"env.environment",[1518,1585,1586],{},[449,1587,1568],{},[1518,1589,1590],{},"Auto-detected",[1518,1592,1593],{},"Environment name",[1497,1595,1596,1601,1606,1611],{},[1518,1597,1598],{},[449,1599,1600],{},"include",[1518,1602,1603],{},[449,1604,1605],{},"string[]",[1518,1607,1608],{},[449,1609,1610],{},"undefined",[1518,1612,1613,1614,758],{},"Route patterns to log. Supports glob (",[449,1615,1616],{},"\u002Fapi\u002F**",[1497,1618,1619,1624,1628,1632],{},[1518,1620,1621],{},[449,1622,1623],{},"exclude",[1518,1625,1626],{},[449,1627,1605],{},[1518,1629,1630],{},[449,1631,1610],{},[1518,1633,1634],{},"Route patterns to exclude. Exclusions take precedence",[1497,1636,1637,1642,1647,1651],{},[1518,1638,1639],{},[449,1640,1641],{},"routes",[1518,1643,1644],{},[449,1645,1646],{},"Record\u003Cstring, RouteConfig>",[1518,1648,1649],{},[449,1650,1610],{},[1518,1652,1653],{},"Route-specific service configuration",[1497,1655,1656,1660,1664,1669],{},[1518,1657,1658],{},[449,1659,1472],{},[1518,1661,1662],{},[449,1663,1526],{},[1518,1665,1666,1668],{},[449,1667,1531],{}," in dev",[1518,1670,1671],{},"Pretty print with tree formatting",[1497,1673,1674,1679,1683,1687],{},[1518,1675,1676],{},[449,1677,1678],{},"prettyErrorFrames",[1518,1680,1681],{},[449,1682,1526],{},[1518,1684,1685,1668],{},[449,1686,1531],{},[1518,1688,1689],{},"Dev-only code snippets around the primary stack frame",[1497,1691,1692,1697,1702,1711],{},[1518,1693,1694],{},[449,1695,1696],{},"prettyErrorStackDepth",[1518,1698,1699],{},[449,1700,1701],{},"number",[1518,1703,1704,1707,1708,1710],{},[449,1705,1706],{},"2"," when compact, ",[449,1709,1130],{}," otherwise",[1518,1712,1713],{},"Max extra stack frames after the snippet (dim gray)",[1497,1715,1716,1721,1725,1729],{},[1518,1717,1718],{},[449,1719,1720],{},"prettyErrorCompact",[1518,1722,1723],{},[449,1724,1526],{},[1518,1726,1727,1668],{},[449,1728,1531],{},[1518,1730,1731],{},"Tighter error block: shorter snippet. Context fields stay on separate tree rows.",[1497,1733,1734,1739,1744,1750],{},[1518,1735,1736],{},[449,1737,1738],{},"devErrorHandler",[1518,1740,1741],{},[449,1742,1743],{},"'evlog' | 'nitro'",[1518,1745,1746,1749],{},[449,1747,1748],{},"'evlog'"," in pretty dev",[1518,1751,1752,1754,1755,1758,1759,1762],{},[449,1753,1748],{},": wide event only (no Nitro ",[449,1756,1757],{},"[request error]"," overlay). ",[449,1760,1761],{},"'nitro'",": keep Nitro's Youch output too",[1442,1764,1765,1769,1770,1772,1773,1775,1776,1779,1780,1783],{"color":1444,"icon":44},[1766,1767,1768],"strong",{},"Which handler?"," Use ",[449,1771,1748],{}," (default in pretty dev) for a single terminal signal. Use ",[449,1774,1761],{}," when you also want Nitro's native Youch overlay alongside the wide event. With ",[449,1777,1778],{},"pretty: false",", set ",[449,1781,1782],{},"devErrorHandler: 'evlog'"," explicitly to suppress Nitro while logging JSON.",[445,1785,1786,1787,1789,1790,1789,1792,1794,1795,1789,1798,1789,1801,1803,1804,1789,1807,1789,1810,1812,1813,1789,1816,1789,1818,1820,1821,1789,1824,1789,1826,1829],{},"| ",[449,1788,1475],{}," | ",[449,1791,1526],{},[449,1793,1537],{}," | Suppress console output. Events are still built, sampled, and drained. Use for stdout-based platforms |\n| ",[449,1796,1797],{},"sampling.rates",[449,1799,1800],{},"object",[449,1802,1610],{}," | Head sampling rates per log level (0-100%) |\n| ",[449,1805,1806],{},"sampling.keep",[449,1808,1809],{},"array",[449,1811,1610],{}," | Tail sampling conditions to force-keep logs |\n| ",[449,1814,1815],{},"transport.enabled",[449,1817,1526],{},[449,1819,1537],{}," | Enable client-to-server log transport |\n| ",[449,1822,1823],{},"transport.endpoint",[449,1825,1568],{},[449,1827,1828],{},"'\u002Fapi\u002F_evlog\u002Fingest'"," | Transport endpoint |",[509,1831,1833],{"id":1832},"route-filtering","Route Filtering",[445,1835,1836,1837,1839,1840,1842],{},"Use ",[449,1838,1600],{}," and ",[449,1841,1623],{}," to control which routes are logged:",[521,1844,1846],{"className":594,"code":1845,"filename":596,"language":597,"meta":527,"style":527},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    include: ['\u002Fapi\u002F**', '\u002Fauth\u002F**'],\n    exclude: [\n      '\u002Fapi\u002F_nuxt_icon\u002F**',\n      '\u002Fapi\u002F_content\u002F**',\n      '\u002Fapi\u002Fhealth',\n    ],\n  },\n})\n",[449,1847,1848,1860,1878,1886,1914,1924,1936,1947,1958,1965,1969],{"__ignoreMap":527},[531,1849,1850,1852,1854,1856,1858],{"class":533,"line":534},[531,1851,605],{"class":604},[531,1853,608],{"class":604},[531,1855,612],{"class":611},[531,1857,616],{"class":615},[531,1859,620],{"class":619},[531,1861,1862,1864,1866,1868,1870,1872,1874,1876],{"class":533,"line":623},[531,1863,627],{"class":626},[531,1865,630],{"class":619},[531,1867,633],{"class":615},[531,1869,636],{"class":619},[531,1871,639],{"class":540},[531,1873,636],{"class":619},[531,1875,644],{"class":615},[531,1877,647],{"class":619},[531,1879,1880,1882,1884],{"class":533,"line":650},[531,1881,653],{"class":626},[531,1883,630],{"class":619},[531,1885,658],{"class":619},[531,1887,1888,1891,1893,1895,1897,1899,1901,1903,1905,1908,1910,1912],{"class":533,"line":661},[531,1889,1890],{"class":626},"    include",[531,1892,630],{"class":619},[531,1894,633],{"class":615},[531,1896,636],{"class":619},[531,1898,1616],{"class":540},[531,1900,636],{"class":619},[531,1902,849],{"class":619},[531,1904,679],{"class":619},[531,1906,1907],{"class":540},"\u002Fauth\u002F**",[531,1909,636],{"class":619},[531,1911,644],{"class":615},[531,1913,647],{"class":619},[531,1915,1916,1919,1921],{"class":533,"line":671},[531,1917,1918],{"class":626},"    exclude",[531,1920,630],{"class":619},[531,1922,1923],{"class":615}," [\n",[531,1925,1926,1929,1932,1934],{"class":533,"line":689},[531,1927,1928],{"class":619},"      '",[531,1930,1931],{"class":540},"\u002Fapi\u002F_nuxt_icon\u002F**",[531,1933,636],{"class":619},[531,1935,647],{"class":619},[531,1937,1938,1940,1943,1945],{"class":533,"line":695},[531,1939,1928],{"class":619},[531,1941,1942],{"class":540},"\u002Fapi\u002F_content\u002F**",[531,1944,636],{"class":619},[531,1946,647],{"class":619},[531,1948,1949,1951,1954,1956],{"class":533,"line":701},[531,1950,1928],{"class":619},[531,1952,1953],{"class":540},"\u002Fapi\u002Fhealth",[531,1955,636],{"class":619},[531,1957,647],{"class":619},[531,1959,1960,1963],{"class":533,"line":961},[531,1961,1962],{"class":615},"    ]",[531,1964,647],{"class":619},[531,1966,1967],{"class":533,"line":966},[531,1968,698],{"class":619},[531,1970,1971,1973],{"class":533,"line":988},[531,1972,704],{"class":619},[531,1974,707],{"class":615},[1442,1976,1979,1982,1983,1839,1985,1987],{"color":1977,"icon":1978},"warning","i-lucide-alert-triangle",[1766,1980,1981],{},"Exclusions take precedence."," If a path matches both ",[449,1984,1600],{},[449,1986,1623],{},", it will be excluded.",[513,1989,1991],{"id":1990},"route-based-service-names","Route-Based Service Names",[445,1993,1994],{},"Assign different service names to different route groups:",[521,1996,1998],{"className":594,"code":1997,"filename":596,"language":597,"meta":527,"style":527},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'default-service' },\n    routes: {\n      '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n      '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      '\u002Fapi\u002Fbooking\u002F**': { service: 'booking-service' },\n    },\n  },\n})\n",[449,1999,2000,2012,2030,2038,2061,2070,2096,2122,2148,2152,2156],{"__ignoreMap":527},[531,2001,2002,2004,2006,2008,2010],{"class":533,"line":534},[531,2003,605],{"class":604},[531,2005,608],{"class":604},[531,2007,612],{"class":611},[531,2009,616],{"class":615},[531,2011,620],{"class":619},[531,2013,2014,2016,2018,2020,2022,2024,2026,2028],{"class":533,"line":623},[531,2015,627],{"class":626},[531,2017,630],{"class":619},[531,2019,633],{"class":615},[531,2021,636],{"class":619},[531,2023,639],{"class":540},[531,2025,636],{"class":619},[531,2027,644],{"class":615},[531,2029,647],{"class":619},[531,2031,2032,2034,2036],{"class":533,"line":650},[531,2033,653],{"class":626},[531,2035,630],{"class":619},[531,2037,658],{"class":619},[531,2039,2040,2042,2044,2046,2049,2051,2053,2056,2058],{"class":533,"line":661},[531,2041,664],{"class":626},[531,2043,630],{"class":619},[531,2045,834],{"class":619},[531,2047,2048],{"class":626}," service",[531,2050,630],{"class":619},[531,2052,679],{"class":619},[531,2054,2055],{"class":540},"default-service",[531,2057,636],{"class":619},[531,2059,2060],{"class":619}," },\n",[531,2062,2063,2066,2068],{"class":533,"line":671},[531,2064,2065],{"class":626},"    routes",[531,2067,630],{"class":619},[531,2069,658],{"class":619},[531,2071,2072,2074,2077,2079,2081,2083,2085,2087,2089,2092,2094],{"class":533,"line":689},[531,2073,1928],{"class":619},[531,2075,2076],{"class":626},"\u002Fapi\u002Fauth\u002F**",[531,2078,636],{"class":619},[531,2080,630],{"class":619},[531,2082,834],{"class":619},[531,2084,2048],{"class":626},[531,2086,630],{"class":619},[531,2088,679],{"class":619},[531,2090,2091],{"class":540},"auth-service",[531,2093,636],{"class":619},[531,2095,2060],{"class":619},[531,2097,2098,2100,2103,2105,2107,2109,2111,2113,2115,2118,2120],{"class":533,"line":695},[531,2099,1928],{"class":619},[531,2101,2102],{"class":626},"\u002Fapi\u002Fpayment\u002F**",[531,2104,636],{"class":619},[531,2106,630],{"class":619},[531,2108,834],{"class":619},[531,2110,2048],{"class":626},[531,2112,630],{"class":619},[531,2114,679],{"class":619},[531,2116,2117],{"class":540},"payment-service",[531,2119,636],{"class":619},[531,2121,2060],{"class":619},[531,2123,2124,2126,2129,2131,2133,2135,2137,2139,2141,2144,2146],{"class":533,"line":701},[531,2125,1928],{"class":619},[531,2127,2128],{"class":626},"\u002Fapi\u002Fbooking\u002F**",[531,2130,636],{"class":619},[531,2132,630],{"class":619},[531,2134,834],{"class":619},[531,2136,2048],{"class":626},[531,2138,630],{"class":619},[531,2140,679],{"class":619},[531,2142,2143],{"class":540},"booking-service",[531,2145,636],{"class":619},[531,2147,2060],{"class":619},[531,2149,2150],{"class":533,"line":961},[531,2151,692],{"class":619},[531,2153,2154],{"class":533,"line":966},[531,2155,698],{"class":619},[531,2157,2158,2160],{"class":533,"line":988},[531,2159,704],{"class":619},[531,2161,707],{"class":615},[509,2163,2165],{"id":2164},"drain-enrichers","Drain & Enrichers",[445,2167,2168],{},"Use Nitro plugin hooks to send logs to external services and enrich them with additional context.",[513,2170,2172],{"id":2171},"drain-plugin","Drain Plugin",[521,2174,2177],{"className":594,"code":2175,"filename":2176,"language":597,"meta":527,"style":527},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[449,2178,2179,2204,2224,2244,2248,2274,2303,2322,2328,2348,2352,2374,2405],{"__ignoreMap":527},[531,2180,2181,2184,2187,2189,2192,2194,2197,2199,2201],{"class":533,"line":534},[531,2182,2183],{"class":604},"import",[531,2185,2186],{"class":604}," type",[531,2188,834],{"class":619},[531,2190,2191],{"class":615}," DrainContext",[531,2193,864],{"class":619},[531,2195,2196],{"class":604}," from",[531,2198,679],{"class":619},[531,2200,1488],{"class":540},[531,2202,2203],{"class":619},"'\n",[531,2205,2206,2208,2210,2213,2215,2217,2219,2222],{"class":533,"line":623},[531,2207,2183],{"class":604},[531,2209,834],{"class":619},[531,2211,2212],{"class":615}," createAxiomDrain",[531,2214,864],{"class":619},[531,2216,2196],{"class":604},[531,2218,679],{"class":619},[531,2220,2221],{"class":540},"evlog\u002Faxiom",[531,2223,2203],{"class":619},[531,2225,2226,2228,2230,2233,2235,2237,2239,2242],{"class":533,"line":650},[531,2227,2183],{"class":604},[531,2229,834],{"class":619},[531,2231,2232],{"class":615}," createDrainPipeline",[531,2234,864],{"class":619},[531,2236,2196],{"class":604},[531,2238,679],{"class":619},[531,2240,2241],{"class":540},"evlog\u002Fpipeline",[531,2243,2203],{"class":619},[531,2245,2246],{"class":533,"line":661},[531,2247,810],{"emptyLinePlaceholder":809},[531,2249,2250,2253,2256,2259,2261,2264,2267,2270,2272],{"class":533,"line":671},[531,2251,2252],{"class":747},"const",[531,2254,2255],{"class":615}," pipeline ",[531,2257,2258],{"class":619},"=",[531,2260,2232],{"class":611},[531,2262,2263],{"class":619},"\u003C",[531,2265,2266],{"class":537},"DrainContext",[531,2268,2269],{"class":619},">",[531,2271,616],{"class":615},[531,2273,620],{"class":619},[531,2275,2276,2279,2281,2283,2286,2288,2291,2293,2296,2298,2301],{"class":533,"line":689},[531,2277,2278],{"class":626},"  batch",[531,2280,630],{"class":619},[531,2282,834],{"class":619},[531,2284,2285],{"class":626}," size",[531,2287,630],{"class":619},[531,2289,2290],{"class":1129}," 50",[531,2292,849],{"class":619},[531,2294,2295],{"class":626}," intervalMs",[531,2297,630],{"class":619},[531,2299,2300],{"class":1129}," 5000",[531,2302,2060],{"class":619},[531,2304,2305,2308,2310,2312,2315,2317,2320],{"class":533,"line":695},[531,2306,2307],{"class":626},"  retry",[531,2309,630],{"class":619},[531,2311,834],{"class":619},[531,2313,2314],{"class":626}," maxAttempts",[531,2316,630],{"class":619},[531,2318,2319],{"class":1129}," 3",[531,2321,2060],{"class":619},[531,2323,2324,2326],{"class":533,"line":701},[531,2325,704],{"class":619},[531,2327,707],{"class":615},[531,2329,2330,2332,2335,2337,2340,2342,2345],{"class":533,"line":961},[531,2331,2252],{"class":747},[531,2333,2334],{"class":615}," drain ",[531,2336,2258],{"class":619},[531,2338,2339],{"class":611}," pipeline",[531,2341,616],{"class":615},[531,2343,2344],{"class":611},"createAxiomDrain",[531,2346,2347],{"class":615},"())\n",[531,2349,2350],{"class":533,"line":966},[531,2351,810],{"emptyLinePlaceholder":809},[531,2353,2354,2356,2358,2361,2363,2365,2368,2370,2372],{"class":533,"line":988},[531,2355,605],{"class":604},[531,2357,608],{"class":604},[531,2359,2360],{"class":611}," defineNitroPlugin",[531,2362,616],{"class":615},[531,2364,616],{"class":619},[531,2366,2367],{"class":754},"nitroApp",[531,2369,758],{"class":619},[531,2371,761],{"class":747},[531,2373,658],{"class":619},[531,2375,2376,2379,2381,2384,2386,2389,2391,2393,2396,2398,2400,2403],{"class":533,"line":1039},[531,2377,2378],{"class":615},"  nitroApp",[531,2380,818],{"class":619},[531,2382,2383],{"class":615},"hooks",[531,2385,818],{"class":619},[531,2387,2388],{"class":611},"hook",[531,2390,616],{"class":626},[531,2392,636],{"class":619},[531,2394,2395],{"class":540},"evlog:drain",[531,2397,636],{"class":619},[531,2399,849],{"class":619},[531,2401,2402],{"class":615}," drain",[531,2404,707],{"class":626},[531,2406,2407,2409],{"class":533,"line":1044},[531,2408,704],{"class":619},[531,2410,707],{"class":615},[513,2412,2414],{"id":2413},"enricher-plugin","Enricher Plugin",[521,2416,2419],{"className":594,"code":2417,"filename":2418,"language":597,"meta":527,"style":527},"import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\nconst enrichers = [\n  createUserAgentEnricher(),\n  createGeoEnricher(),\n  createRequestSizeEnricher(),\n  createTraceContextEnricher(),\n]\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[449,2420,2421,2427,2434,2441,2448,2455,2468,2472,2483,2492,2500,2508,2516,2521,2525,2545,2579,2608,2615],{"__ignoreMap":527},[531,2422,2423,2425],{"class":533,"line":534},[531,2424,2183],{"class":604},[531,2426,658],{"class":619},[531,2428,2429,2432],{"class":533,"line":623},[531,2430,2431],{"class":615},"  createUserAgentEnricher",[531,2433,647],{"class":619},[531,2435,2436,2439],{"class":533,"line":650},[531,2437,2438],{"class":615},"  createGeoEnricher",[531,2440,647],{"class":619},[531,2442,2443,2446],{"class":533,"line":661},[531,2444,2445],{"class":615},"  createRequestSizeEnricher",[531,2447,647],{"class":619},[531,2449,2450,2453],{"class":533,"line":671},[531,2451,2452],{"class":615},"  createTraceContextEnricher",[531,2454,647],{"class":619},[531,2456,2457,2459,2461,2463,2466],{"class":533,"line":689},[531,2458,704],{"class":619},[531,2460,2196],{"class":604},[531,2462,679],{"class":619},[531,2464,2465],{"class":540},"evlog\u002Fenrichers",[531,2467,2203],{"class":619},[531,2469,2470],{"class":533,"line":695},[531,2471,810],{"emptyLinePlaceholder":809},[531,2473,2474,2476,2479,2481],{"class":533,"line":701},[531,2475,2252],{"class":747},[531,2477,2478],{"class":615}," enrichers ",[531,2480,2258],{"class":619},[531,2482,1923],{"class":615},[531,2484,2485,2487,2490],{"class":533,"line":961},[531,2486,2431],{"class":611},[531,2488,2489],{"class":615},"()",[531,2491,647],{"class":619},[531,2493,2494,2496,2498],{"class":533,"line":966},[531,2495,2438],{"class":611},[531,2497,2489],{"class":615},[531,2499,647],{"class":619},[531,2501,2502,2504,2506],{"class":533,"line":988},[531,2503,2445],{"class":611},[531,2505,2489],{"class":615},[531,2507,647],{"class":619},[531,2509,2510,2512,2514],{"class":533,"line":1039},[531,2511,2452],{"class":611},[531,2513,2489],{"class":615},[531,2515,647],{"class":619},[531,2517,2518],{"class":533,"line":1044},[531,2519,2520],{"class":615},"]\n",[531,2522,2523],{"class":533,"line":1078},[531,2524,810],{"emptyLinePlaceholder":809},[531,2526,2527,2529,2531,2533,2535,2537,2539,2541,2543],{"class":533,"line":1410},[531,2528,605],{"class":604},[531,2530,608],{"class":604},[531,2532,2360],{"class":611},[531,2534,616],{"class":615},[531,2536,616],{"class":619},[531,2538,2367],{"class":754},[531,2540,758],{"class":619},[531,2542,761],{"class":747},[531,2544,658],{"class":619},[531,2546,2547,2549,2551,2553,2555,2557,2559,2561,2564,2566,2568,2570,2573,2575,2577],{"class":533,"line":1416},[531,2548,2378],{"class":615},[531,2550,818],{"class":619},[531,2552,2383],{"class":615},[531,2554,818],{"class":619},[531,2556,2388],{"class":611},[531,2558,616],{"class":626},[531,2560,636],{"class":619},[531,2562,2563],{"class":540},"evlog:enrich",[531,2565,636],{"class":619},[531,2567,849],{"class":619},[531,2569,751],{"class":619},[531,2571,2572],{"class":754},"ctx",[531,2574,758],{"class":619},[531,2576,761],{"class":747},[531,2578,658],{"class":619},[531,2580,2581,2584,2586,2588,2591,2594,2597,2599,2602,2604,2606],{"class":533,"line":1421},[531,2582,2583],{"class":604},"    for",[531,2585,751],{"class":626},[531,2587,2252],{"class":747},[531,2589,2590],{"class":615}," enricher",[531,2592,2593],{"class":619}," of",[531,2595,2596],{"class":615}," enrichers",[531,2598,1310],{"class":626},[531,2600,2601],{"class":611},"enricher",[531,2603,616],{"class":626},[531,2605,2572],{"class":615},[531,2607,707],{"class":626},[531,2609,2610,2613],{"class":533,"line":1436},[531,2611,2612],{"class":619},"  }",[531,2614,707],{"class":626},[531,2616,2618,2620],{"class":533,"line":2617},19,[531,2619,704],{"class":619},[531,2621,707],{"class":615},[1442,2623,1462,2626,1839,2628,2630],{"color":2624,"icon":2625},"neutral","i-lucide-arrow-right",[498,2627,90],{"href":95},[498,2629,349],{"href":350}," docs for the full list of available drains and enrichers.",[509,2632,61],{"id":1478},[513,2634,2636],{"id":2635},"head-sampling","Head Sampling",[445,2638,2639],{},"Randomly keep a percentage of logs per level. Runs before the request completes.",[521,2641,2643],{"className":594,"code":2642,"filename":596,"language":597,"meta":527,"style":527},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    sampling: {\n      rates: {\n        info: 10,\n        warn: 50,\n        debug: 5,\n        error: 100,\n      },\n    },\n  },\n})\n",[449,2644,2645,2657,2675,2683,2692,2701,2713,2724,2736,2748,2753,2757,2761],{"__ignoreMap":527},[531,2646,2647,2649,2651,2653,2655],{"class":533,"line":534},[531,2648,605],{"class":604},[531,2650,608],{"class":604},[531,2652,612],{"class":611},[531,2654,616],{"class":615},[531,2656,620],{"class":619},[531,2658,2659,2661,2663,2665,2667,2669,2671,2673],{"class":533,"line":623},[531,2660,627],{"class":626},[531,2662,630],{"class":619},[531,2664,633],{"class":615},[531,2666,636],{"class":619},[531,2668,639],{"class":540},[531,2670,636],{"class":619},[531,2672,644],{"class":615},[531,2674,647],{"class":619},[531,2676,2677,2679,2681],{"class":533,"line":650},[531,2678,653],{"class":626},[531,2680,630],{"class":619},[531,2682,658],{"class":619},[531,2684,2685,2688,2690],{"class":533,"line":661},[531,2686,2687],{"class":626},"    sampling",[531,2689,630],{"class":619},[531,2691,658],{"class":619},[531,2693,2694,2697,2699],{"class":533,"line":671},[531,2695,2696],{"class":626},"      rates",[531,2698,630],{"class":619},[531,2700,658],{"class":619},[531,2702,2703,2706,2708,2711],{"class":533,"line":689},[531,2704,2705],{"class":626},"        info",[531,2707,630],{"class":619},[531,2709,2710],{"class":1129}," 10",[531,2712,647],{"class":619},[531,2714,2715,2718,2720,2722],{"class":533,"line":695},[531,2716,2717],{"class":626},"        warn",[531,2719,630],{"class":619},[531,2721,2290],{"class":1129},[531,2723,647],{"class":619},[531,2725,2726,2729,2731,2734],{"class":533,"line":701},[531,2727,2728],{"class":626},"        debug",[531,2730,630],{"class":619},[531,2732,2733],{"class":1129}," 5",[531,2735,647],{"class":619},[531,2737,2738,2741,2743,2746],{"class":533,"line":961},[531,2739,2740],{"class":626},"        error",[531,2742,630],{"class":619},[531,2744,2745],{"class":1129}," 100",[531,2747,647],{"class":619},[531,2749,2750],{"class":533,"line":966},[531,2751,2752],{"class":619},"      },\n",[531,2754,2755],{"class":533,"line":988},[531,2756,692],{"class":619},[531,2758,2759],{"class":533,"line":1039},[531,2760,698],{"class":619},[531,2762,2763,2765],{"class":533,"line":1044},[531,2764,704],{"class":619},[531,2766,707],{"class":615},[445,2768,2769],{},"Each level is a percentage from 0 to 100. Levels you don't configure default to 100% (keep everything). Error defaults to 100% even when other levels are configured.",[513,2771,2773],{"id":2772},"tail-sampling","Tail Sampling",[445,2775,2776],{},"Evaluate after the request completes and force-keep logs that match specific conditions, regardless of head sampling.",[521,2778,2780],{"className":594,"code":2779,"filename":596,"language":597,"meta":527,"style":527},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    sampling: {\n      rates: { info: 10 },\n      keep: [\n        { duration: 1000 },\n        { status: 400 },\n        { path: '\u002Fapi\u002Fcritical\u002F**' },\n      ],\n    },\n  },\n})\n",[449,2781,2782,2794,2812,2820,2828,2845,2854,2869,2882,2900,2907,2911,2915],{"__ignoreMap":527},[531,2783,2784,2786,2788,2790,2792],{"class":533,"line":534},[531,2785,605],{"class":604},[531,2787,608],{"class":604},[531,2789,612],{"class":611},[531,2791,616],{"class":615},[531,2793,620],{"class":619},[531,2795,2796,2798,2800,2802,2804,2806,2808,2810],{"class":533,"line":623},[531,2797,627],{"class":626},[531,2799,630],{"class":619},[531,2801,633],{"class":615},[531,2803,636],{"class":619},[531,2805,639],{"class":540},[531,2807,636],{"class":619},[531,2809,644],{"class":615},[531,2811,647],{"class":619},[531,2813,2814,2816,2818],{"class":533,"line":650},[531,2815,653],{"class":626},[531,2817,630],{"class":619},[531,2819,658],{"class":619},[531,2821,2822,2824,2826],{"class":533,"line":661},[531,2823,2687],{"class":626},[531,2825,630],{"class":619},[531,2827,658],{"class":619},[531,2829,2830,2832,2834,2836,2839,2841,2843],{"class":533,"line":671},[531,2831,2696],{"class":626},[531,2833,630],{"class":619},[531,2835,834],{"class":619},[531,2837,2838],{"class":626}," info",[531,2840,630],{"class":619},[531,2842,2710],{"class":1129},[531,2844,2060],{"class":619},[531,2846,2847,2850,2852],{"class":533,"line":689},[531,2848,2849],{"class":626},"      keep",[531,2851,630],{"class":619},[531,2853,1923],{"class":615},[531,2855,2856,2859,2862,2864,2867],{"class":533,"line":695},[531,2857,2858],{"class":619},"        {",[531,2860,2861],{"class":626}," duration",[531,2863,630],{"class":619},[531,2865,2866],{"class":1129}," 1000",[531,2868,2060],{"class":619},[531,2870,2871,2873,2876,2878,2880],{"class":533,"line":701},[531,2872,2858],{"class":619},[531,2874,2875],{"class":626}," status",[531,2877,630],{"class":619},[531,2879,1334],{"class":1129},[531,2881,2060],{"class":619},[531,2883,2884,2886,2889,2891,2893,2896,2898],{"class":533,"line":961},[531,2885,2858],{"class":619},[531,2887,2888],{"class":626}," path",[531,2890,630],{"class":619},[531,2892,679],{"class":619},[531,2894,2895],{"class":540},"\u002Fapi\u002Fcritical\u002F**",[531,2897,636],{"class":619},[531,2899,2060],{"class":619},[531,2901,2902,2905],{"class":533,"line":966},[531,2903,2904],{"class":615},"      ]",[531,2906,647],{"class":619},[531,2908,2909],{"class":533,"line":988},[531,2910,692],{"class":619},[531,2912,2913],{"class":533,"line":1039},[531,2914,698],{"class":619},[531,2916,2917,2919],{"class":533,"line":1044},[531,2918,704],{"class":619},[531,2920,707],{"class":615},[513,2922,2924],{"id":2923},"custom-tail-sampling","Custom Tail Sampling",[445,2926,2927,2928,2931],{},"For conditions beyond status, duration, and path, use the ",[449,2929,2930],{},"evlog:emit:keep"," hook:",[521,2933,2936],{"className":594,"code":2934,"filename":2935,"language":597,"meta":527,"style":527},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server\u002Fplugins\u002Fevlog-sampling.ts",[449,2937,2938,2958,2990,3034,3053,3068,3073,3079],{"__ignoreMap":527},[531,2939,2940,2942,2944,2946,2948,2950,2952,2954,2956],{"class":533,"line":534},[531,2941,605],{"class":604},[531,2943,608],{"class":604},[531,2945,2360],{"class":611},[531,2947,616],{"class":615},[531,2949,616],{"class":619},[531,2951,2367],{"class":754},[531,2953,758],{"class":619},[531,2955,761],{"class":747},[531,2957,658],{"class":619},[531,2959,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988],{"class":533,"line":623},[531,2961,2378],{"class":615},[531,2963,818],{"class":619},[531,2965,2383],{"class":615},[531,2967,818],{"class":619},[531,2969,2388],{"class":611},[531,2971,616],{"class":626},[531,2973,636],{"class":619},[531,2975,2930],{"class":540},[531,2977,636],{"class":619},[531,2979,849],{"class":619},[531,2981,751],{"class":619},[531,2983,2572],{"class":754},[531,2985,758],{"class":619},[531,2987,761],{"class":747},[531,2989,658],{"class":619},[531,2991,2992,2995,2997,2999,3002,3004,3007,3009,3012,3015,3017,3020,3023,3026,3028,3031],{"class":533,"line":650},[531,2993,2994],{"class":747},"    const",[531,2996,829],{"class":615},[531,2998,774],{"class":619},[531,3000,3001],{"class":615}," ctx",[531,3003,818],{"class":619},[531,3005,3006],{"class":615},"context",[531,3008,818],{"class":619},[531,3010,3011],{"class":615},"user",[531,3013,3014],{"class":604}," as",[531,3016,834],{"class":619},[531,3018,3019],{"class":626}," premium",[531,3021,3022],{"class":619},"?:",[531,3024,3025],{"class":537}," boolean",[531,3027,864],{"class":619},[531,3029,3030],{"class":619}," |",[531,3032,3033],{"class":537}," undefined\n",[531,3035,3036,3039,3041,3043,3046,3049,3051],{"class":533,"line":661},[531,3037,3038],{"class":604},"    if",[531,3040,751],{"class":626},[531,3042,3011],{"class":615},[531,3044,3045],{"class":619},"?.",[531,3047,3048],{"class":615},"premium",[531,3050,1310],{"class":626},[531,3052,620],{"class":619},[531,3054,3055,3058,3060,3063,3065],{"class":533,"line":671},[531,3056,3057],{"class":615},"      ctx",[531,3059,818],{"class":619},[531,3061,3062],{"class":615},"shouldKeep",[531,3064,774],{"class":619},[531,3066,3067],{"class":1057}," true\n",[531,3069,3070],{"class":533,"line":689},[531,3071,3072],{"class":619},"    }\n",[531,3074,3075,3077],{"class":533,"line":695},[531,3076,2612],{"class":619},[531,3078,707],{"class":626},[531,3080,3081,3083],{"class":533,"line":701},[531,3082,704],{"class":619},[531,3084,707],{"class":615},[1442,3086,3087,3088,3091],{"color":1444,"icon":13},"Errors are always kept by default. You have to explicitly set ",[449,3089,3090],{},"error: 0"," to drop them.",[509,3093,3095],{"id":3094},"client-transport","Client Transport",[445,3097,3098],{},"Send browser logs to your server for processing and draining alongside server-side events.",[521,3100,3102],{"className":594,"code":3101,"filename":596,"language":597,"meta":527,"style":527},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    transport: {\n      enabled: true,\n      endpoint: '\u002Fapi\u002F_evlog\u002Fingest',\n    },\n  },\n})\n",[449,3103,3104,3116,3134,3142,3151,3162,3178,3182,3186],{"__ignoreMap":527},[531,3105,3106,3108,3110,3112,3114],{"class":533,"line":534},[531,3107,605],{"class":604},[531,3109,608],{"class":604},[531,3111,612],{"class":611},[531,3113,616],{"class":615},[531,3115,620],{"class":619},[531,3117,3118,3120,3122,3124,3126,3128,3130,3132],{"class":533,"line":623},[531,3119,627],{"class":626},[531,3121,630],{"class":619},[531,3123,633],{"class":615},[531,3125,636],{"class":619},[531,3127,639],{"class":540},[531,3129,636],{"class":619},[531,3131,644],{"class":615},[531,3133,647],{"class":619},[531,3135,3136,3138,3140],{"class":533,"line":650},[531,3137,653],{"class":626},[531,3139,630],{"class":619},[531,3141,658],{"class":619},[531,3143,3144,3147,3149],{"class":533,"line":661},[531,3145,3146],{"class":626},"    transport",[531,3148,630],{"class":619},[531,3150,658],{"class":619},[531,3152,3153,3156,3158,3160],{"class":533,"line":671},[531,3154,3155],{"class":626},"      enabled",[531,3157,630],{"class":619},[531,3159,1058],{"class":1057},[531,3161,647],{"class":619},[531,3163,3164,3167,3169,3171,3174,3176],{"class":533,"line":689},[531,3165,3166],{"class":626},"      endpoint",[531,3168,630],{"class":619},[531,3170,679],{"class":619},[531,3172,3173],{"class":540},"\u002Fapi\u002F_evlog\u002Fingest",[531,3175,636],{"class":619},[531,3177,647],{"class":619},[531,3179,3180],{"class":533,"line":695},[531,3181,692],{"class":619},[531,3183,3184],{"class":533,"line":701},[531,3185,698],{"class":619},[531,3187,3188,3190],{"class":533,"line":961},[531,3189,704],{"class":619},[531,3191,707],{"class":615},[513,3193,3195],{"id":3194},"how-it-works","How It Works",[3197,3198,3199,3205,3211,3214,3222],"ol",{},[473,3200,3201,3202],{},"Client calls ",[449,3203,3204],{},"log.info({ action: 'click', button: 'submit' })",[473,3206,3207,3208,3210],{},"Log is sent to ",[449,3209,3173],{}," via POST",[473,3212,3213],{},"Server enriches with environment context",[473,3215,3216,3218,3219],{},[449,3217,2395],{}," hook is called with ",[449,3220,3221],{},"source: 'client'",[473,3223,3224],{},"External services receive the log",[513,3226,3228],{"id":3227},"client-identity","Client Identity",[445,3230,3231,3232,630],{},"Attach user context to every client log with ",[449,3233,3234],{},"setIdentity",[521,3236,3239],{"className":594,"code":3237,"filename":3238,"language":597,"meta":527,"style":527},"\u002F\u002F After login\nsetIdentity({ userId: 'usr_123', orgId: 'org_456' })\n\nlog.info({ action: 'checkout' })\n\u002F\u002F -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n\n\u002F\u002F After logout\nclearIdentity()\n","Nuxt (auto-imported)",[449,3240,3241,3247,3285,3289,3318,3323,3327,3332],{"__ignoreMap":527},[531,3242,3243],{"class":533,"line":534},[531,3244,3246],{"class":3245},"sHwdD","\u002F\u002F After login\n",[531,3248,3249,3251,3253,3255,3258,3260,3262,3265,3267,3269,3272,3274,3276,3279,3281,3283],{"class":533,"line":623},[531,3250,3234],{"class":611},[531,3252,616],{"class":615},[531,3254,826],{"class":619},[531,3256,3257],{"class":626}," userId",[531,3259,630],{"class":619},[531,3261,679],{"class":619},[531,3263,3264],{"class":540},"usr_123",[531,3266,636],{"class":619},[531,3268,849],{"class":619},[531,3270,3271],{"class":626}," orgId",[531,3273,630],{"class":619},[531,3275,679],{"class":619},[531,3277,3278],{"class":540},"org_456",[531,3280,636],{"class":619},[531,3282,864],{"class":619},[531,3284,707],{"class":615},[531,3286,3287],{"class":533,"line":650},[531,3288,810],{"emptyLinePlaceholder":809},[531,3290,3291,3294,3296,3298,3300,3302,3305,3307,3309,3312,3314,3316],{"class":533,"line":661},[531,3292,3293],{"class":615},"log",[531,3295,818],{"class":619},[531,3297,1444],{"class":611},[531,3299,616],{"class":615},[531,3301,826],{"class":619},[531,3303,3304],{"class":626}," action",[531,3306,630],{"class":619},[531,3308,679],{"class":619},[531,3310,3311],{"class":540},"checkout",[531,3313,636],{"class":619},[531,3315,864],{"class":619},[531,3317,707],{"class":615},[531,3319,3320],{"class":533,"line":671},[531,3321,3322],{"class":3245},"\u002F\u002F -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[531,3324,3325],{"class":533,"line":689},[531,3326,810],{"emptyLinePlaceholder":809},[531,3328,3329],{"class":533,"line":695},[531,3330,3331],{"class":3245},"\u002F\u002F After logout\n",[531,3333,3334,3337],{"class":533,"line":701},[531,3335,3336],{"class":611},"clearIdentity",[531,3338,3339],{"class":615},"()\n",[513,3341,3343],{"id":3342},"syncing-identity-with-auth","Syncing Identity with Auth",[445,3345,3346],{},"Use a route middleware to keep identity in sync with your auth state:",[521,3348,3351],{"className":594,"code":3349,"filename":3350,"language":597,"meta":527,"style":527},"export default defineNuxtRouteMiddleware(() => {\n  const { user } = useAuth()\n\n  if (user.value) {\n    setIdentity({ userId: user.value.id, email: user.value.email })\n  } else {\n    clearIdentity()\n  }\n})\n","middleware\u002Fidentity.global.ts",[449,3352,3353,3370,3387,3391,3408,3454,3463,3470,3474],{"__ignoreMap":527},[531,3354,3355,3357,3359,3362,3364,3366,3368],{"class":533,"line":534},[531,3356,605],{"class":604},[531,3358,608],{"class":604},[531,3360,3361],{"class":611}," defineNuxtRouteMiddleware",[531,3363,616],{"class":615},[531,3365,2489],{"class":619},[531,3367,761],{"class":747},[531,3369,658],{"class":619},[531,3371,3372,3374,3376,3378,3380,3382,3385],{"class":533,"line":623},[531,3373,768],{"class":747},[531,3375,834],{"class":619},[531,3377,829],{"class":615},[531,3379,864],{"class":619},[531,3381,774],{"class":619},[531,3383,3384],{"class":611}," useAuth",[531,3386,3339],{"class":626},[531,3388,3389],{"class":533,"line":650},[531,3390,810],{"emptyLinePlaceholder":809},[531,3392,3393,3395,3397,3399,3401,3404,3406],{"class":533,"line":661},[531,3394,1293],{"class":604},[531,3396,751],{"class":626},[531,3398,3011],{"class":615},[531,3400,818],{"class":619},[531,3402,3403],{"class":615},"value",[531,3405,1310],{"class":626},[531,3407,620],{"class":619},[531,3409,3410,3413,3415,3417,3419,3421,3423,3425,3427,3429,3432,3434,3437,3439,3441,3443,3445,3447,3450,3452],{"class":533,"line":671},[531,3411,3412],{"class":611},"    setIdentity",[531,3414,616],{"class":626},[531,3416,826],{"class":619},[531,3418,3257],{"class":626},[531,3420,630],{"class":619},[531,3422,829],{"class":615},[531,3424,818],{"class":619},[531,3426,3403],{"class":615},[531,3428,818],{"class":619},[531,3430,3431],{"class":615},"id",[531,3433,849],{"class":619},[531,3435,3436],{"class":626}," email",[531,3438,630],{"class":619},[531,3440,829],{"class":615},[531,3442,818],{"class":619},[531,3444,3403],{"class":615},[531,3446,818],{"class":619},[531,3448,3449],{"class":615},"email",[531,3451,864],{"class":619},[531,3453,707],{"class":626},[531,3455,3456,3458,3461],{"class":533,"line":689},[531,3457,2612],{"class":619},[531,3459,3460],{"class":604}," else",[531,3462,658],{"class":619},[531,3464,3465,3468],{"class":533,"line":695},[531,3466,3467],{"class":611},"    clearIdentity",[531,3469,3339],{"class":626},[531,3471,3472],{"class":533,"line":701},[531,3473,1413],{"class":619},[531,3475,3476,3478],{"class":533,"line":961},[531,3477,704],{"class":619},[531,3479,707],{"class":615},[509,3481,3483],{"id":3482},"production-tips","Production Tips",[445,3485,3486,3487,3490],{},"Use Nuxt's ",[449,3488,3489],{},"$production"," override to keep full logging in development while sampling and disabling console output in production:",[521,3492,3494],{"className":594,"code":3493,"filename":596,"language":597,"meta":527,"style":527},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      console: false,\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 0 },\n        keep: [{ duration: 1000 }, { status: 400 }],\n      },\n    },\n  },\n})\n",[449,3495,3496,3508,3526,3534,3554,3558,3567,3576,3588,3597,3632,3666,3670,3674,3678],{"__ignoreMap":527},[531,3497,3498,3500,3502,3504,3506],{"class":533,"line":534},[531,3499,605],{"class":604},[531,3501,608],{"class":604},[531,3503,612],{"class":611},[531,3505,616],{"class":615},[531,3507,620],{"class":619},[531,3509,3510,3512,3514,3516,3518,3520,3522,3524],{"class":533,"line":623},[531,3511,627],{"class":626},[531,3513,630],{"class":619},[531,3515,633],{"class":615},[531,3517,636],{"class":619},[531,3519,639],{"class":540},[531,3521,636],{"class":619},[531,3523,644],{"class":615},[531,3525,647],{"class":619},[531,3527,3528,3530,3532],{"class":533,"line":650},[531,3529,653],{"class":626},[531,3531,630],{"class":619},[531,3533,658],{"class":619},[531,3535,3536,3538,3540,3542,3544,3546,3548,3550,3552],{"class":533,"line":661},[531,3537,664],{"class":626},[531,3539,630],{"class":619},[531,3541,834],{"class":619},[531,3543,2048],{"class":626},[531,3545,630],{"class":619},[531,3547,679],{"class":619},[531,3549,682],{"class":540},[531,3551,636],{"class":619},[531,3553,2060],{"class":619},[531,3555,3556],{"class":533,"line":671},[531,3557,698],{"class":619},[531,3559,3560,3563,3565],{"class":533,"line":689},[531,3561,3562],{"class":626},"  $production",[531,3564,630],{"class":619},[531,3566,658],{"class":619},[531,3568,3569,3572,3574],{"class":533,"line":695},[531,3570,3571],{"class":626},"    evlog",[531,3573,630],{"class":619},[531,3575,658],{"class":619},[531,3577,3578,3581,3583,3586],{"class":533,"line":701},[531,3579,3580],{"class":626},"      console",[531,3582,630],{"class":619},[531,3584,3585],{"class":1057}," false",[531,3587,647],{"class":619},[531,3589,3590,3593,3595],{"class":533,"line":961},[531,3591,3592],{"class":626},"      sampling",[531,3594,630],{"class":619},[531,3596,658],{"class":619},[531,3598,3599,3602,3604,3606,3608,3610,3612,3614,3617,3619,3621,3623,3626,3628,3630],{"class":533,"line":966},[531,3600,3601],{"class":626},"        rates",[531,3603,630],{"class":619},[531,3605,834],{"class":619},[531,3607,2838],{"class":626},[531,3609,630],{"class":619},[531,3611,2710],{"class":1129},[531,3613,849],{"class":619},[531,3615,3616],{"class":626}," warn",[531,3618,630],{"class":619},[531,3620,2290],{"class":1129},[531,3622,849],{"class":619},[531,3624,3625],{"class":626}," debug",[531,3627,630],{"class":619},[531,3629,1307],{"class":1129},[531,3631,2060],{"class":619},[531,3633,3634,3637,3639,3641,3643,3645,3647,3649,3652,3654,3656,3658,3660,3662,3664],{"class":533,"line":988},[531,3635,3636],{"class":626},"        keep",[531,3638,630],{"class":619},[531,3640,633],{"class":615},[531,3642,826],{"class":619},[531,3644,2861],{"class":626},[531,3646,630],{"class":619},[531,3648,2866],{"class":1129},[531,3650,3651],{"class":619}," },",[531,3653,834],{"class":619},[531,3655,2875],{"class":626},[531,3657,630],{"class":619},[531,3659,1334],{"class":1129},[531,3661,864],{"class":619},[531,3663,644],{"class":615},[531,3665,647],{"class":619},[531,3667,3668],{"class":533,"line":1039},[531,3669,2752],{"class":619},[531,3671,3672],{"class":533,"line":1044},[531,3673,692],{"class":619},[531,3675,3676],{"class":533,"line":1078},[531,3677,698],{"class":619},[531,3679,3680,3682],{"class":533,"line":1410},[531,3681,704],{"class":619},[531,3683,707],{"class":615},[509,3685,3687],{"id":3686},"next-steps","Next Steps",[445,3689,3690,3691,3693],{},"Deepen your ",[1766,3692,167],{}," integration:",[470,3695,3696,3701,3706,3711],{},[473,3697,3698,3700],{},[498,3699,46],{"href":47},": Design comprehensive events with context layering",[473,3702,3703,3705],{},[498,3704,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[473,3707,3708,3710],{},[498,3709,61],{"href":62},": Control log volume with head and tail sampling",[473,3712,3713,3715,3716,452,3718,456,3720,3722],{},[498,3714,51],{"href":52},": Throw errors with ",[449,3717,1175],{},[449,3719,1178],{},[449,3721,1181],{}," fields",[3724,3725,3726],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":527,"searchDepth":623,"depth":623,"links":3728},[3729,3733,3734,3735,3736,3739,3743,3748,3753,3754],{"id":511,"depth":623,"text":25,"children":3730},[3731,3732],{"id":515,"depth":650,"text":516},{"id":590,"depth":650,"text":591},{"id":720,"depth":623,"text":46},{"id":1166,"depth":623,"text":1167},{"id":1459,"depth":623,"text":414},{"id":1832,"depth":623,"text":1833,"children":3737},[3738],{"id":1990,"depth":650,"text":1991},{"id":2164,"depth":623,"text":2165,"children":3740},[3741,3742],{"id":2171,"depth":650,"text":2172},{"id":2413,"depth":650,"text":2414},{"id":1478,"depth":623,"text":61,"children":3744},[3745,3746,3747],{"id":2635,"depth":650,"text":2636},{"id":2772,"depth":650,"text":2773},{"id":2923,"depth":650,"text":2924},{"id":3094,"depth":623,"text":3095,"children":3749},[3750,3751,3752],{"id":3194,"depth":650,"text":3195},{"id":3227,"depth":650,"text":3228},{"id":3342,"depth":650,"text":3343},{"id":3482,"depth":623,"text":3483},{"id":3686,"depth":623,"text":3687},"Automatic wide events, structured errors, drain adapters, enrichers, tail sampling, and client transport in Nuxt applications.","md",null,{},{"title":167,"icon":170},{"title":167,"description":3755},"L3P-JskvbeLmOq5bpk4R3zh74JKJI-Zt_41pIrbb9pI",[3763,3765],{"title":36,"path":163,"stem":164,"description":3764,"icon":165,"children":-1},"evlog supports every major TypeScript framework. Choose your stack and get started in minutes.",{"title":172,"path":173,"stem":174,"description":3766,"icon":175,"children":-1},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.",1781037499208]